k8s数据库,k8s中的Mysql数据库持久化存储
大家好,今天来为大家解答k8s数据库这个问题的一些问题点,包括k8s中的Mysql数据库持久化存储也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
linux和k8s和数据库笔记
有关linux:
1、卸载某一个特定的挂在点。
umount/dev/datavg01/data01
2、移掉lvm。
vgremove/dev/datavg01
3、拷贝数据。
scp-r/home/gaoge.txt root@192.168.10.1:/opt或rsync-av/root/rpmpkgs/tmp/backups/
4、显示系统盘符并以树状格式展开。
lsblk。
5、扫描新增设备。
echo"---">/sys/class/scsi-host/hosto/scan
6、强行杀死mysql
kill-9$(ps-ef| grep mysql)
7、将文件内容以每一行5个的形式展示出来。
cat test2.txt| xargs-n 5
8、用cut去实现awk切割列的效果
cat/etc/passwd| cut-d:-f 2
9、sed、grsp、awk。之前已经说过了、具体看从linux三剑客说起这篇。
10、增加一个oracle用户让其属于oinstall组同时也隶属于dba组。useradd oracle-g oinstall-G dba
11、新建立一个组groupnew并将组id修改为255。
groupadd-g 255 groupnew
12、将本地/dev/hdb整盘中的数据备份到/dev/hdd上。
dd if=/dev/hdb of=/dev/hdd
13、查看服务器cpu个数。
cat/proc/cpuinfo| grep"physical id"| wc-l
14、查看服务器io状况并以每间隔1秒的速度输出5次。
iostat 1 5
15、查看服务器内存使用情况并以每间隔2秒的速度输出10次。
vmstat 2 10
16、将gaoge.txt中的第一列db2找到并将db两个字符用ab替换。
cat gaoge.txt|grep db2| awk-F 2'{print$1}'| tr db ab
17、将包名解压到指定目录。
tar-cxvf包名-C指定的目录
18、linux中前后台任务切换。
ctrl+z切换到后台、jobs显示id、fg+ id切换至前台。
19、杀掉top下stopped的进程。
ps-A-ostat,ppid,pid,cmd|grep-e'^[T]'
然后在进行kill
20、监控cpu状态。
mpstat
21、查看虚拟内存使用了多少。
swapon
22、每月1到10号4:45重启nginx。
crontab-u root-l显示root当前的计划任务。
crontab-u root-e后输入以下内容并保存退出。
45 4 1,10** systemctl start nginx
23、awk打印df-h的第一列、第三列、最后一列。
df-h| awk'{print$1""$3""$NF}'
24、批量拉、打标签、推docker镜像的shell脚本。
#!/bin/bash
for image in'docker images| grep 10.171.10.1:10000| awk'{ print$1":"$2}
do
version='echo$image| awk-F/'{ print$2}'
docker tag$image 192.168.10.1/$version
docker push 192.168.10.1/$version
done
25、正则表达式匹配电话号码。
(?0d{2}[)-]?d{8}
26、编译安装三步骤。
./configure--prefix=安装目录
make
make install
有关kubernetes:
将kubernetes中pod的数据拷贝到物理宿主机上。
kubectl cp gyl-run/gyl-mysql-01020304:/opt/docker.sh/opt
将kubernetes中物理宿主机上的数据拷贝到pod中。
kubectl cp/opt/docker.sh gyl-run/gyl-mysql-01020304:/opt
检查当前用户有没有权限在k8s中创建资源权限。
kubectl auth can-i'*''*'
检查当前用户有没有权限在k8s集群中创建namespace权限。
kubectl auth can-i create pods--all-namespaces
查看集群是否健康。
kubectl get cs
有关数据库:
查看 mysql二进制日志格式。
show variables like‘%binlog_format%’
查看所有二进制日志文件
show master logs
查看正在写入的二进制日志
show master status
格式化二进制显示为sql格式
mysqlbinlog--base64--output=decode-rows-v--start-date="2019-01-25 00:00:00"--stop-date=“2019-01-26 17:30” master-bin.000006
利用bin-log去还原数据
/usr/bin/mysqlbinlog--no-default/var/lib/mysql/mysql-bin.00001| usr/bin/mysql-u root-p pwd test
连接 postgresql
psql-U用户名-d数据
数据库名-h主机地址-p端口(默认端口为5432)
l显示数据库列表
d显示所有表
d表名称显示表结构
du显示所有数据库用户
c数据库名连接数据库
q退出pg窗口
pg备份:
pg_dump-U kong-d kong-f/opt/2019-01-26-pg.sql
pg还原:
psql-d kong-U kong-f/opt/2019-01-26-pg.sql
mongo批量更新数据:把age大于20的class name修改为,设置multi为true
如何入门k8s
Kubernetes(简称K8S)是Google开源的分布式的容器管理平台,方便我们在服务器集群中管理我们容器化应用。
节点(Master node and Worker node)
节点通常指的就是服务器,在k8s中有两种节点:管理节点(Master Node)和工作节点(Worker Node)
管理节点(Master Node):负责管理整个k8s集群,一般由3个管理节点组成HA的架构。
工作节点(Worker Node):主要负责运行容器。
命名空间(Namespace)
k8s命名空间主要用于隔离集群资源、隔离容器等,为集群提供了一种虚拟隔离的策略;默认存在3个名字空间,分别是默认命名空间 default、系统命名空间 kube-system和 kube-public。
Object
k8s对象(Object)是一种持久化存储并且用于表示集群状态的实体。k8s对象其实就是k8s自己的配置协议,总之我们可以通过定义一个object让k8s根据object定义执行一些部署任务、监控任务等等。
POD
Pod是 Kubernetes部署应用或服务的最小的基本单位。一个Pod封装多个应用容器(也可以只有一个容器)、存储资源、一个独立的网络 IP以及管理控制容器运行方式的策略选项。
副本集(Replica Set,RS)
是一种控制器,负责监控和维护集群中pod的副本(replicas)数,确保pod的副本数是我们期望的样子。
部署(Deployment)
表示对k8s集群的一次更新操作,是k8s集群中最常用的Object,主要用于部署应用。支持滚动升级。
服务(service)
是对应用的抽象,也是k8s中的基本操作单元,一个服务背后由多个pod支持,服务通过负载均衡策略将请求转发到容器中。
Ingress
是一种网关服务,可以将k8s服务通过http协议暴露到外部。
无状态应用&有状态应用
无状态应用指的是应用在容器中运行时候不会在容器中持久化存储数据,应用容器可以随意创建、销毁;如果一个应用有多个容器实例,对于无状态应用,请求转发给任何一个容器实例都可以正确运行。例如:web应用
有状态应用指的是应用在容器中运行时候需要稳定的持久化存储、稳定的网络标识、固定的pod启动和停止次序。例如:mysql数据库
k8s中的Mysql数据库持久化存储
一、配置:
环境:
CentOS7
VMware
笔者配置了四台虚拟机:
K8S-Master节点: 3GB内存 2核CPU 20GB硬盘空间
K8S-node1节点: 2GB内存 2核CPU 30GB硬盘空间
K8S-node2节点: 2GB内存 2核CPU 30GB硬盘空间
镜像仓库节点: 2GB内存 2核CPU 50GB硬盘空间
二、节点规划:
使用三台虚拟机搭建K8S集群,使用一台虚拟机搭建镜像仓库。
每台虚拟机配置两块网卡,其中一块为“NAT模式”,用于拉取镜像等功能。
另外一块网卡为“仅主机模式”,用于集群节点间的通信。归划如下:
K8s-master节点:
仅主机模式:10.10.10.200
NAT模式: 192.168.200.130
K8S-node1节点:
仅主机模式:10.10.10.201
NAT模式: 192.168.200.131
K8S-node2节点:
仅主机模式:10.10.10.202
NAT模式: 192.168.200.132
镜像仓库节点:
仅主机模式:10.10.10.101
NAT模式: 192.168.200.150
三、版本信息
Linux内核版本:
Linux version 3.10.0-862.el7.x86_64(builder@kbuilder.dev.centos.org)
(gcc version 4.8.5 20150623(Red Hat 4.8.5-28)(GCC))
#1 SMP Fri Apr 20 16:44:24 UTC 2018
K8s集群版本为1.15.0版本:
四、基于StatefulSet与PV/PVC的MySql持久化存储实验
1.在每个节点安装nfs服务
在“镜像仓库”节点,执行以下命令:
yum install-y nfs-common nfs-utils rpcbind
在k8s集群,执行以下命令:
yum install-y nfs-utils rpcbind
2.在“镜像仓库”节点下,配置nfs服务器
mkdir/nfs_mysql
Chmod 777 /nfs_mysql/
(在测试环境中,为了不考虑用户属性,暂时赋予777权限,但在生产环境不推荐这样做)
Chown nfsnobody /nfs_mysql/
echo“/nfs_mysql*(rw,no_root_squash,no_all_squash,sync)” >>/etc/exports
cat/etc/exports
/nfs_mysql *(rw,no_root_squash,no_all_squash,sync)
systemctl start rpcbind
systemctl start nfs
3.测试nfs服务是否可用
mkdir/test
showmount-e 10.10.10.101
可见/nfs_mysql*已暴露于共享目录,接下来测试挂载是否可用:
在master节点下执行:
mount-t nfs 10.10.10.101:/nfs_mysql/test/
echo"hello-world">>/test/1.txt
在镜像仓库节点下查看1.txt是否存在,若存在则挂载成功:
可见nfs服务可以正常使用,接下来删除test目录和1.txt
在镜像仓库下:
[root@hub nfs_mysql]# rm-f 1.txt
在Master节点下:
[root@k8s-master~]# umount/test/
[root@k8s-master~]# rm-rf/test/
同理,依照以上步骤同时创建:(提供多个mysql副本进行挂载)
nfs_mysql1
nfs_mysql2
完成后需要重启nfs服务
systemctl restart rpcbind
systemctl restart nfs
最终效果:
4.将nfs封装成pv
创建mysql_test文件夹,将yaml文件统一保存在此目录下
mkdir mysql_test
cd mysql_test
vim mysql-pv.yml
mysql-pv.yml配置如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path:/nfs_mysql
server: 10.10.10.101
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv1
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path:/nfs_mysql1
server: 10.10.10.101
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv2
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path:/nfs_mysql2
server: 10.10.10.101
注意:
在k8s集群15版本中recycle回收策略已被删除,只能用retain策略或者Delete策略。这里我们使用 persistentVolumeReclaimPolicy: Retain
执行命令:
kubectl create-f mysql-pv.yml
kubectl get pv
如图所示,即为Pv创建成功。
5.部署MySQL,在mysql_test目录下编写mysql.yml,配置文件如下
apiVersion: v1
kind: Service
metadata:
name: mysql
labels:
app: mysql
spec:
ports:
- port: 3306
name: mysql
clusterIP: None
selector:
app: mysql
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName:"mysql"
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.6
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath:/var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName:"nfs"
resources:
requests:
storage: 1Gi
执行以下命令,部署mysql服务:
kubectl create-f mysql.yml
如图可知,mysql按StatefulSet依次创建了mysql-0 mysql-1 mysql-2
查看各个Pod部在哪个节点:
6.通过创建临时容器,使用MySQL客户端发送测试请求给MySQL master节点
注意:
主机名为mysql-0.mysql;跨命名空间的话,主机名请使用mysql-0.mysql. [NAMESPACE_NAME].如果没有指定命名空间,默认为default,即 mysql-0.mysql. default。
这里笔者打算关闭node2节点来模拟node2宕机,来测试是否实现数据的持久化存储,
所以我们向node2上的mysql1写入数据。
执行以下命令,访问mysql1:
kubectl run mysql-client--image=mysql:5.6-it--rm--restart=Never-- mysql-h mysql-1.mysql.default-p password
创建数据库demo,并向messages表中写入hello-world
CREATE DATABASE demo;
CREATE TABLE demo.messages(message VARCHAR(250));
INSERT INTO demo.messages VALUES('hello-world');
如图所示
接下来我们来关闭k8s-node2虚拟机,模拟宕机
查看nodes的运行状态,可知node2的状态已转变为NotReady
一段时间后,k8s将Pod MySql-1迁移到节点k8s-node1
由于时间过长,笔者把三个Pod都删除重启后,验证数据:
MySQL服务恢复,数据完好无损!
文章分享结束,k8s数据库和k8s中的Mysql数据库持久化存储的答案你都知道了吗?欢迎再次光临本站哦!