光电网站设计,wordpress动漫小人2019,学校官方网站网页设计,wordpress全屏0.准备工作
在开始之前#xff0c;要确保我们的节点已经加入网络并且已经准备好#xff0c;如果没有可以去看我前面发表的踩坑与解决的文章#xff0c;希望能够帮到你。 1.k8s部署redis
1.1目标
由于我们的服务器资源较小#xff0c;所以决定只部署一个redis副本#x…0.准备工作
在开始之前要确保我们的节点已经加入网络并且已经准备好如果没有可以去看我前面发表的踩坑与解决的文章希望能够帮到你。 1.k8s部署redis
1.1目标
由于我们的服务器资源较小所以决定只部署一个redis副本同时我们要能够提供一个对外的端口进行连接以及使用我们自己的自定义redis配置文件。
1.2效果
成功之后的效果应该如下图中有关redis的部分 1.3项目结构
redis-configmap.yaml
作用用于在 Kubernetes 中创建一个 ConfigMap用来存储 Redis 的配置文件内容。
redis-statefulset.yaml
作用定义一个 StatefulSet用于部署和管理 Redis 的有状态应用。
redis.conf
作用Redis 的核心配置文件用于定义 Redis 的运行参数。 1.4代码展示
redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: redis-config
data:redis.conf: |save 86400 1 appendonly no redis-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cluster
spec:serviceName: redis-clusterreplicas: 1 selector:matchLabels:app: redis-clustertemplate:metadata:labels:app: redis-clusterspec:containers:- name: redisimage: redis:alpine # 使用官方的 Redis 镜像ports:- containerPort: 6379 # Redis 默认端口volumeMounts:- name: redis-datamountPath: /data # Redis 数据存储路径- name: redis-configmountPath: ****** # 挂载自定义配置文件subPath: redis.confcommand:- redis-server- ******* # 指定使用自定义的配置文件volumes:- name: redis-dataemptyDir: {} # 使用 emptyDir 或 PVC 持久化数据- name: redis-configconfigMap:name: redis-config # 通过 ConfigMap 加载配置文件
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster
spec:selector:app: redis-clusterports:- protocol: TCPport: ***targetPort: *****nodePort: ****type: NodePort # 使用 NodePort 类型
redis.conf
# redis-persistence.confsave 86400 1 appendonly no 1.5命令部署
由于之前已经部署过所以先采用这两行命令停止redis的部署 将之前提供的yaml文件保存到服务器的自定义位置上然后执行create命令 如果像下面这样我们就成功了 接下来我们试试可不可以使用redis客户端工具对我们的redis进行连接这里我采用的是Redis Insight 输入暴露出来的端口之后成功连接 2.k8s部署mysql
2.1目标
同样由于服务器资源的限制对于mysql我也只打算开一个单机版能够使用mysql外部客户端进行连接对于数据可以持久化保存
2.2项目结构 mysql-statefulset.yaml
作用定义 MySQL 的 StatefulSet用于管理有状态的 MySQL Pod。
mysqlpvc.yaml
作用定义 PersistentVolumeClaim (PVC)用于向 MySQL Pod 申请持久化存储。
mysqlpv.yaml
作用定义 PersistentVolume (PV)用于提供实际的存储资源。
2.3项目代码示例
mysql-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysql
spec:serviceName: mysqlreplicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:oracleenv:- name: MYSQL_ROOT_PASSWORDvalue: ******ports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: [ReadWriteOnce]resources:requests:storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:name: mysql
spec:ports:- port: ****targetPort: ***nodePort: ****selector:app: mysqltype: NodePort
mysqlpvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-data-mysql-0
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: standard # 或者你集群中其他存储类的名称mysqlpv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: mysql-pv
spec:capacity:storage: 10GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: standardhostPath: path: /mnt/data/mysql 2.4效果
如下图所示便是成功 2.5命令部署
将上面的yaml文件保存到服务器之后执行create命令进行部署需要先执行pv创建一个可以持久化的资源之后再执行statefulset文件便成功部署
注意在执行我们的statefulset之后k8s便会根据我们的定义为我们创建一个默认的pvc来试图绑定资源但我们采用了自定义的pv资源所以默认的pvc是绑定不到的我们需要在这后面再次运行我们的pvcyaml文件将它的配置进行改变 如果能够帮助到你的话可以留下一个免费的赞吗
题外话
无状态应用是指应用的实例之间没有数据依赖应用不需要保留用户的会话数据或持久化数据。
特点
无数据依赖每个 Pod 都是独立的处理完请求后不会存储任何状态数据。弹性伸缩方便Pod 可以随意增加或减少不需要考虑数据一致性。容易替换Pod 重启或迁移不会影响应用的功能因为所有数据都存储在外部如数据库、缓存等。常见场景 Web 服务器如 Nginx、Apache无状态 API 服务静态文件托管
有状态应用是指应用的实例需要存储并维护自己的状态信息通常需要持久化数据。
特点
数据依赖应用需要保留会话数据或用户数据数据通常存储在本地磁盘或持久化存储中。固定 Pod 标识Pod 通常需要固定的标识如名称以确保数据和应用的关联性。复杂部署需要考虑数据持久化、备份、恢复和一致性问题。常见场景 数据库如 MySQL、Redis、MongoDB消息队列如 Kafka、RabbitMQ日志存储如 Elasticsearch 如果还有啥错误的话欢迎在评论区或者私信我