赞
踩
已经搭建好kubernetes1.25.4集群
Kubernetes 1.25.4版本安装_V胡桃夹子的博客-CSDN博客
kubeasz安装kubernetes1.25.5_V胡桃夹子的博客-CSDN博客
kubernetes1.25.4机器安装好了nfs服务
CentOS8搭建nfs服务_V胡桃夹子的博客-CSDN博客
本文介绍的mysql8单节点部署,采用nfs存储,自定义k8s namespacee,创建pv/pvc/configmap来部署的
自定义工作空间develop,后面部署mysql8时,将指定空间工作空间
kubectl create namespace develop
或者使用yaml创建
cat > mysql-namespace.yaml<<EOF
# namespace
apiVersion: v1 # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: Namespace # k8s资源类型,Namespace资源
metadata: # 资源的元数据语句块,是针对kind对应资源的全局属性
name: develop # 声明工作空间名称
labels: # 标签
name: develop # 设置namespace的label标签
EOF
kubectl apply -f mysql-namespace.yaml
查看所有工作空间
kubectl get ns
# 或者
kubectl get namespace
销毁namespace命令:
kubectl delete namespaces develop
# 或者
kubectl delete -f mysql-namespace.yaml
什么是pv?简短一点说就是管理员创建的一种存储资源,是集群中由管理员配置的一段网络存储。
什么是pvc?简单粗爆理解,就一种声明,说我要使用pv了,是由用户进行存储的请求。
创建pv、pvc资源配置文件 mysql-storage.yaml
cat > mysql-storage.yaml<<EOF # pv apiVersion: v1 # 版本要符合kubectl apiVersion规定,v1是稳定版本 kind: PersistentVolume # k8s资源类型,PersistentVolume资源 metadata: # 资源的元数据语句块,是针对kind对应资源的全局属性 namespace: develop # 指定工作空间 name: mysql-nfspv-volume # 自定义pv名字,PersistentVolume下全局唯一 labels: # 标签 app: mysql # 设置pv的label标签 spec: # 规格语句块 capacity: # 存储能力,用于定义PV的存储容量 storage: 2Gi # PV的具体存储空间大小,Mi表示1024进制 accessModes: # 访问能力,指定访问模式 - ReadWriteMany # 用于定义资源的访问方式 (这里用的是单节点可读可写) storageClassName: nfs # 使用了NFS网络文件系统作为存储卷 persistentVolumeReclaimPolicy: Retain # pv回收策略,当声明被释放,pv将保留(不清理和删除) nfs: # 指定使用NFS存储驱动 server: 10.104.10.202 # 指定NFS服务器IP地址 path: /nfs/mysql # 指定NFS共享目录的位置,且需提前在该目录中创建mysql目录 --- # pvc apiVersion: v1 # 版本要符合kubectl apiVersion规定,v1是稳定版本 kind: PersistentVolumeClaim # k8s资源类型,PersistentVolumeClaim资源 metadata: # 资源的元数据语句块,是针对kind对应资源的全局属性 namespace: develop # 指定工作空间 name: mysql-nfspvc-mysql # pvc的名字,PersistentVolumeClaim下全局唯一 spec: # 规格语句块 accessModes: # 访问能力,指定访问模式 - ReadWriteMany # 用于定义资源的访问方式 (单个节点 这里用的是单节点可读可写) resources: # 访问模式下的资源语句块 requests: # 请求语句块 storage: 2Gi # 请求存储空间,PVC允许申请的大小 storageClassName: nfs # 使用了NFS网络文件系统作为存储卷 selector: matchLabels: app: mysql # 根据Label选择对应PV EOF
应用该pv资源
kubectl apply -f mysql-storage.yaml
查看该pv资源
kubectl get pv
查看该pvc资源
kubectl get pvc
若需要进行删除pv、pvc
pv普通删除命令如下:
kubectl delete pv mysql-nfspv-volume
pvc普通删除命令如下:
kubectl delete pvc mysql-nfspvc-mysql
pv强制删除命令如下:
kubectl patch pv mysql-nfspv-volume -p '{"metadata":{"finalizers":null}}'
pvc强制删除命令如下:
kubectl patch pvc mysql-nfspvc-mysql -p '{"metadata":{"finalizers": []}}' --type=merge
ConfigMap 是一种 API对象,用来将非机密性的数据保存到键值对中。使用时,Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap 的主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
使用 ConfigMap 的限制条件:
- ConfigMap 需要在 Pod 启动前创建出来;
- 并且只有当 ConfigMap 和 Pod 处于同一命名空间时,才可以被 Pod 引用;
- 当 Pod 挂载 ConfigMap 绑定的目录时,目录下的目录并不会挂载到 Pod 内,只有目录下的文件会被挂载。
定义mysql-configmap.yaml,即mysql配置文件参数:
cat > mysql-configmap.yaml<<EOF apiVersion: v1 # 版本要符合kubectl apiVersion规定,v1是稳定版本 kind: ConfigMap # 表明是Kubernetes ConfigMap metadata: # 资源的元数据语句块,是针对kind对应资源的全局属性 namespace: develop # 指定工作空间 name: mysql8-config # 当前ConfigMap名称 data: # my.cnf代表着mysql8的配置文件名称 my.cnf: | [mysql] # mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 数据库文件位置 datadir=/var/lib/mysql # 允许最大连接数 max_connections=1000 # innodb的dml操作的行级锁的等待时间 innodb_lock_wait_timeout=500 # 设置mysql服务端默认字符集 character-set-server=utf8mb4 # 默认创建新数据的新建排序规则 collation-server=utf8mb4_general_ci # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 缓存大小 sort_buffer_size=256MB # 大小写敏感配置项0为敏感,1为不敏感 lower_case_table_names=1 # 选择正8区 default-time-zone='+8:00' EOF
创建Mysql ConfigMap:
kubectl apply -f mysql-configmap.yaml
查看ConfigMap:
kubectl get configmap -n develop
定义mysql8-deployment.yaml配置文件:
cat > mysql-deployment.yaml <<EOF # Service apiVersion: v1 # 版本要符合kubectl apiVersion规定,v1是稳定版本 kind: Service # 表明是Kubernetes Service metadata: # 资源的元数据语句块,是针对kind对应资源的全局属性 namespace: develop # 指定工作空间 name: mysql8 # Service的名称,Service下全局唯一 spec: type: NodePort # 配置为NodePort,外部可以访问,不指定则默认为ClusterIP,只能集群内部访问 ports: - port: 3306 # Service 提供的服务端口,即容器间服务调用的端口 targetPort: 3306 # 容器暴露的端口,与Dockerfile暴露端口保持一致 nodePort: 32306 # NodePort,外部访问的端口 selector: app: mysql8 # 标签 --- # Deployment apiVersion: apps/v1 # 版本要符合kubectl apiVersion规定,v1是稳定版本 kind: Deployment # 表明是Kubernetes Deployment metadata: # 资源的元数据语句块,是针对kind对应资源的全局属性 namespace: develop # 指定工作空间 name: mysql8 # Deployment的名称,Deployment下全局唯一 labels: # 标签 app: mysql8 # 标识Pod,在Service中的selector指定匹配label为app:mysql8 spec: replicas: 1 # Pod 副本的期待数量 selector: matchLabels: app: mysql8 # 必须匹配 spec.template.metadata.labels template: # 根据此模版创建Pod的副本 metadata: name: mysql8 labels: app: mysql8 # 必须配置 spec.selector.matchLabels spec: containers: # Pod中包含的容器 - name: mysql8 # 容器的名称 # 容器对应的Docker Image,即镜像名 image: docker.io/library/mysql:8.0.31 # Always:总是拉取;IfNotPresent:默认值,本地有则不拉取;Never:只用本地镜像,从不拉取; imagePullPolicy: IfNotPresent ports: - containerPort: 3306 # 容器应用监听的端口号 env: # 定义环境变量 - name: MYSQL_ROOT_PASSWORD # mysql初始化密码变量 value: "123456" # 配置Mysql Root用户默认密码 livenessProbe: # 判断容器是否正常运行,如果失败则杀掉容器(不是pod),再根据重启策略是否重启容器 initialDelaySeconds: 30 # 初始化延迟时间 periodSeconds: 10 # 探测周期间隔时间 timeoutSeconds: 5 # 单次探测超时时间 successThreshold: 1 # 探测失败到成功的重试次数 failureThreshold: 3 # 探测成功到失败的重试次数 exec: # 在容器中执行此命令,如果命令返回状态码为0,则认为探测成功 command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"] # 判断容器是否能进入ready状态,探针失败则进入noready状态,并从service的endpoints中剔除此容器 readinessProbe: initialDelaySeconds: 10 # 初始化延迟时间 periodSeconds: 10 # 探测周期间隔时间 timeoutSeconds: 5 # 单次探测超时时间 successThreshold: 1 # 探测失败到成功的重试次数 failureThreshold: 3 # 探测成功到失败的重试次数 exec: # 在容器中执行此命令,如果命令返回状态码为0,则认为探测成功 command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"] volumeMounts: - name: mysql-data # 自定义名字,名字须与volumes.name一致 mountPath: /var/lib/mysql # 容器内目录 - name: mysql-config # mysql的配置文件my.cnf mountPath: /etc/mysql/conf.d/my.cnf subPath: my.cnf - name: localtime readOnly: true mountPath: /etc/localtime volumes: - name: mysql-data # 自定义名字,名字须与volumeMounts.name一致 persistentVolumeClaim: claimName: mysql-nfspvc-mysql # 引用的pvc - name: mysql-config configMap: name: mysql8-config # 引用的ConfigMap名称 - name: localtime hostPath: type: File path: /etc/localtime # 宿主机挂载目录 EOF
部署
kubectl apply -f mysql-deployment.yaml
报错:
[root@k8s-master ~]# kubectl apply -f mysql-deployment.yml
service/mysql8 unchanged error: resource mapping not found for name: "mysql8" namespace: "develop" from "mysql8.yml": no matches for kind "Deployment" in version "v1"
ensure CRDs are installed first
上面报错关键字no matches for kind "Deployment" in version "v1"
,是版本号不对,可通过命令查询当前版本号
kubectl api-resources | grep deployment
[root@k8s-master ~]# kubectl apply -f mysql-deployment.yml
deployment.apps/mysql8 created error: resource mapping not found for name: "mysql8" namespace: "develop" from "mysql8.yml": no matches for kind "Service" in version "apps/v1"
ensure CRDs are installed first
上面报错关键字no matches for kind "Service" in version "apps/v1"
,是版本号不对,可通过命令查询当前版本号
kubectl api-resources | grep Service
测试连接mysql
依次删除mysql pod,mysql configmap, mysql pvc,mysql pv
kubectl delete -f mysql-deployment.yaml
kubectl delete -f mysql-configmap.yaml
kubectl delete -f mysql-storage.yaml
重新部署:
kubectl apply -f mysql-storage.yaml
kubectl apply -f mysql-configmap.yaml
kubectl apply -f mysql-deployment.yaml
查看pod:
kubectl get pods -n develop
查看详情:
kubectl describe pod mysql8-5cf55bbd96-5qz6k -n develop
查看日志:
kubectl logs -f mysql8-5cf55bbd96-5qz6k -n develop
CentOS8搭建nfs服务
Kubernetes 1.25.4版本安装
kubeasz安装kubernetes1.25.5
k8s一键安装redis单机版
k8s一键安装mysql8单机版
k8s部署springboot应用
Docker安装及学习
Docker制作springboot运行应用镜像
Docker制作Java8环境镜像
Docker安装Mysql5.7.31
Docker安装Mysql8.1.0
Elasticsearch单机版本安装
Elasticsearch集群安装
ELK安装
Docker安装ELK
zookeeper集群安装
Nginx日志切割
RabbitMQ集群安装
springboot集成prometheus+grafana
windows11安装android应用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。