storagecless +mysql主从
1、StorageClass
StorageClass 存储类。
pv 存储对象。
StorageClass 是按照pvc的要求,动态的生成pv。
在一个大规模的Kubernetes集群里,可能有成千上万个PVC,这就意味着运维人员必须实现创建出这个多个PV,此外,随着项目的需要,会有新的PVC不断被提交,那么运维人员就需要不断的添加新的,满足要求的PV,否则新的Pod就会因为PVC绑定不到PV而导致创建失败。而且通过 PVC 请求到一定的存储空间也很有可能不足以满足应用对于存储设备的各种需求,而且不同的应用程序对于存储性能的要求可能也不尽相同,比如读写速度、并发性能等,为了解决这一问题,Kubernetes 又为我们引入了一个新的资源对象:StorageClass,通过 StorageClass 的定义,管理员可以将存储资源定义为某种类型的资源,比如快速存储、慢速存储等,kubernetes根据 StorageClass 的描述就可以非常直观的知道各种存储资源的具体特性了,这样就可以根据应用的特性去申请合适的存储资源了。
总结:根据pvc的要求,去自动创建符合要求的pv
1、按照pvc创建pv
2、减少资源浪费
Helm --> StorageClass
1.1、安装Helm
Github:https://github.com/helm/helm/releases
下载连接:https://get.helm.sh/helm-v3.7.2-linux-amd64.tar.gz
[root@k8s-master-01 ~]# tar -xf helm-v3.7.2-linux-amd64.tar.gz
[root@k8s-master-01 ~]# mv linux-amd64/helm /usr/local/bin/
yum ---> yum源
helm ---> helm源
如何查找源?
https://helm.sh/ 搜索 nfs-client-provisioner 下载点install,选择
Helm v3或Helm v2
1、添加helm源
[root@k8s-master-01 ~]# helm repo add moikot https://moikot.github.io/helm-charts
"moikot" has been added to your repositories
[root@k8s-master-01 ~]# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"aliyun" has been added to your repositories
[root@k8s-master-01 ~]# helm repo add stable http://mirror.azure.cn/kubernetes/charts/
"stable" has been added to your repositories
[root@k8s-master-01 ~]# helm search repo nfs-client
NAME CHART VERSION APP VERSION DESCRIPTION
moikot/nfs-client-provisioner 1.3.0 3.1.0 nfs-client is an automatic provisioner that use...
stable/nfs-client-provisioner 1.2.11 3.1.0 DEPRECATED - nfs-client is an automatic provisi...
[root@k8s-master-01 ~]# helm pull stable/nfs-client-provisioner
[root@k8s-master-01 ~]# tar -xf nfs-client-provisioner-1.2.11.tgz
[root@k8s-master-01 ~]# cd nfs-client-provisioner/
[root@k8s-master-01 nfs-client-provisioner]# vim values.yaml
nfs:
server: 192.168.11.101
path: /nfs/v3
[root@k8s-master-01 nfs-client-provisioner]# helm install nfs ./ -n kube-system
[root@k8s-master-01 nfs-client-provisioner]# helm list
[root@k8s-master-01 nfs-client-provisioner]# kubectl get pods -n kube-system
[root@k8s-master-01 nfs-client-provisioner]# kubectl get storageclasses.storage.k8s.io
1.2、测试SC
[root@k8s-master-01 k8s]# vim sc.yaml
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc001
namespace: default
spec:
storageClassName: nfs-client
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: "6Gi"
[root@k8s-master-01 k8s]# kubectl apply -f sc.yaml
[root@k8s-master-01 k8s]# kubectl get pvc
pvc001 Bound pvc-1f558ed7-f4b5-448f-84f7-448f454cbd02 6Gi RWX nfs-client 60m
#如果出错,查看日志
[root@k8s-master-01 k8s]# kubectl logs -f -n kube-system nfs-nfs-client-provisioner-6765d46dcb-fxtcl
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs
spec:
selector:
matchLabels:
app: nfs
template:
metadata:
labels:
app: nfs
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: /usr/share/nginx/html
name: html
volumes:
- name: html
persistentVolumeClaim:
claimName: nfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs
namespace: default
spec:
storageClassName: nfs-client
accessModes:
- "ReadWriteMany"
resources:
requests:
storage: "10Gi"
[root@k8s-master-01 k8s]# kubectl apply -f sc1.yaml
deployment.apps/nfs created
persistentvolumeclaim/nfs created
[root@k8s-master-01 k8s]# kubectl get pv,pvc
[root@k8s-master-01 k8s]# kubectl get pods -o wide
nfs-7b7657dcb5-drh2p 1/1 Running 0 63s 10.244.1.158 k8s-node-01
[root@k8s-master-01 k8s]# curl 10.244.1.158
[root@k8s-master-01 v3]# ll
total 0
drwxrwxrwx 2 xxx xxx 6 Jan 11 19:22 default-nfs-pvc-a0c83093-3250-4ace-9762-e4f27ff0c18a
drwxrwxrwx 2 xxx xxx 6 Jan 11 18:49 default-pvc001-pvc-1f558ed7-f4b5-448f-84f7-448f454cbd02
[root@k8s-master-01 v3]# cd default-nfs-pvc-a0c83093-3250-4ace-9762-e4f27ff0c18a/
[root@k8s-master-01 default-nfs-pvc-a0c83093-3250-4ace-9762-e4f27ff0c18a]# echo "pwd"> index.html
[root@k8s-master-01 k8s]# curl 10.244.1.158
pwd
2、MySQL一主多从
2.1、安装MySQL
官网:https://www.mysql.com/
# 首先必须先卸载mariadb
[root@localhost ~]# rpm -qa | grep mysql
[root@localhost ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
[root@localhost ~]# yum -y remove mariadb-libs.x86_64
1、下载安装包
[root@mysql-master ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
2、安装
[root@mysql-master ~]# tar -xf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@mysql-master local]# ln -s /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql
3、统一用户
[root@mysql-master ~]# useradd -M -s /sbin/nologin -r mysql
4、依赖包
[root@mysql-master ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ numactl libaio glibc cmake autoconf
5、创建一个数据存放目录
[root@mysql-master ~]# mkdir /mysql_data
6、统一授权
[root@mysql-master ~]# chown mysql.mysql /mysql_data
[root@mysql-master ~]# chown mysql.mysql -R /usr/local/mysql
[root@mysql-master ~]# chown mysql.mysql -R /usr/local/mysql-5.7.36-linux-glibc2.12-x86_64/
7、添加配置文件
[root@mysql-master ~]# vim /etc/my.cnf
[mysqld]
# 安装目录
basedir=/usr/local/mysql
# 数据目录
datadir=/mysql_data
# 端口
port=3306
# socket文件存放地
socket=/usr/local/mysql/mysql.sock
# 数据库默认的字符集编码
character-set-server=utf8
# 错误日志存放路径
log-error=/var/log/mysqld.log
# PID 文件存放路径
pid-file=/tmp/mysqld.pid
# mysql客户端配置
[mysql]
socket=/usr/local/mysql/mysql.sock
# mysql客户端配置
[client]
socket=/usr/local/mysql/mysql.sock
8、初始化
[root@mysql-master ~]# touch /var/log/mysqld.log
[root@mysql-master ~]# chown mysql.mysql /var/log/mysqld.log
[root@mysql-master ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mysql_data
9、注册MySQL服务
[root@mysql-master ~]# vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
10、测试启动
[root@mysql-master ~]# systemctl daemon-reload
[root@mysql-master ~]# systemctl start mysqld
11、测试连接
[root@mysql-master mysql]# vim /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
[root@mysql-master mysql]# source /etc/profile
# 获取密码
[root@mysql-master mysql]# grep 'temporary password' /var/log/mysqld.log
[root@mysql-master mysql]# mysql -uroot -p'F?twnkaZ2rZJ'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.36
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
# 修改默认密码
mysql> alter user root@localhost identified by 'Test123!';
Query OK, 0 rows affected (0.00 sec)
2.2、部署主从复制
2.2.1、创建复制用户(主节点)
mysql> grant replication slave on *.* to 'shanhe'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2.2.2、开启binlog日志
# 在集群中,server_id必须唯一。(主从都要配置,注意修改server-id值)
[root@mysql-master ~]# vim /etc/my.cnf
server-id=1
log-bin=/mysql_data/log-bin/binlog
[root@mysql-master mysql_data]# mkdir /mysql_data/log-bin
[root@mysql-master mysql_data]# chown mysql.mysql log-bin
[root@mysql-master ~]# systemctl restart mysqld
2.2.3、实现主从复制
1、查看主节点binlog日志的状态
mysql> show master status ;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 154 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2、在从节点配置主从复制
change master to
master_host='192.168.15.201',
master_port=3306,
master_user='tiantian',
master_password='123456',
master_log_file='binlog.000001',
master_log_pos=154;
3、开启主从复制
mysql> start slave ;
Query OK, 0 rows affected (0.00 sec)
4、查看状态
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果出错,查看错误日志:tail -f /var/log/mysqld.log
5.测试:
[root@mysql-master mysql_data]# mysql -uroot -p'Test123!'
mysql> create database e11;
[root@mysql-slave mysql_data]# mysql -uroot -p'Test123!'
mysql> show databases;
e11
3.k8s内配置mysql
[root@k8s-master-01 k8s]# docker run -it --rm mysql:5.7 bash
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
root@70a7b98b9f27:/# cd /etc/mysql/mysql.conf.d/
root@70a7b98b9f27:/etc/mysql/mysql.conf.d# ls
mysqld.cnf
root@70a7b98b9f27:/etc/mysql/mysql.conf.d# cat mysqld.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log