Cấu hình K3S sử dụng MySQL làm hệ thống lưu trữ dữ liệu

Đánh giá nhanh

    1. Môi trường hiện tại
    1. Cài đặt mysql-5.7.37
    1. Cấu hình K3S sử dụng MySQL làm cơ sở dữ liệu
    1. Tập lệnh cài đặt MySQL tự động
    1. Sử dụng tập lệnh cài đặt chính thức của K3S với MySQL làm backend
  1. Môi trường hiện tại =====================

K3S - Phiên bản V1.22.5 được cài đặt trên cụm

Cài đặt đơn node K3S-v1.22.5 (dạng tập lệnh, kèm tập lệnh cài đặt tự động)

Ở đây sử dụng môi trường K3S cài đặt trên một node duy nhất chỉ có master: 192.168.10.20

[root@c7-1 ~]#cat k3s.sh 
#!/bin/bash

# Định nghĩa biến
local_ip=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"|head -n 1`

# Cấu hình môi trường
systemctl stop firewalld && systemctl disable firewalld && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
yum install ntpdate -y && ntpdate time.windows.com

# Cài đặt docker
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
yum -y install yum-utils device-mapper-persistemt-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://4iv7219l.mirror.aliyuncs.com"]
}
EOF
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
sudo systemctl daemon-reload
sysctl -p
systemctl enable docker && systemctl restart docker

# Cài đặt k3s
wget http://49.232.8.65/k3s/v1.22.5/k3s -O /usr/local/bin/k3s && chmod +x /usr/local/bin/k3s
yum -y install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum -y install yum-plugin-elrepo
yum -y install kmod-wireguard wireguard-tools
touch /etc/systemd/system/k3s.service.env
cat > /etc/systemd/system/k3s.service <<EOF
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target

[Install]
WantedBy=multi-user.target

[Service]
Type=notify
EnvironmentFile=-/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s server --docker --no-deploy traefik
EOF

systemctl enable k3s --now
ln -s /usr/local/bin/k3s /usr/local/bin/kubectl

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/kubelet.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

systemctl status k3s
systemctl status docker
kubectl get nodes -o wide

[root@c7-1 ~]#bash k3s.sh &> /dev/null
[root@c7-1 ~]#kubectl get nodes -o wide
NAME   STATUS   ROLES                  AGE   VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
c7-1   Ready    control-plane,master   12m   v1.22.5+k3s1   192.168.10.20   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://20.10.17

[root@c7-1 ~]#kubectl get pods -A
NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE
kube-system   metrics-server-9cf544f65-tp47x           1/1     Running   0          12m
kube-system   coredns-85cb69466-w6tjq                  1/1     Running   0          12m
kube-system   local-path-provisioner-64ffb68fd-zfns8   1/1     Running   0          12m

  1. Cài đặt mysql-5.7.37 ====================

Tải về:

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
wget http://49.232.8.65/mysql-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

Cài đặt

rpm -qa | grep mysql
rpm -qa | grep mariadb
yum -y remove mariadb mysql*
yum -y install wget vim

-------------------------------
[root@c7-1 ~]#ls
k3s.sh  mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
[root@c7-1 ~]#tar zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz 
......
[root@c7-1 ~]#ls
k3s.sh  mysql-5.7.37-linux-glibc2.12-x86_64  mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
[root@c7-1 ~]#mv mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql5.7.37/
[root@c7-1 ~]#ll /usr/local/mysql5.7.37/
Tổng cộng 272
drwxr-xr-x  2 root root    4096 7月   4 13:55 bin
drwxr-xr-x  2 root root      55 7月   4 13:55 docs
drwxr-xr-x  3 root root    4096 7月   4 13:55 include
drwxr-xr-x  5 root root     230 7月   4 13:55 lib
-rw-r--r--  1 7161 31415 259253 11月 30 2021 LICENSE
drwxr-xr-x 28 root root    4096 7月   4 13:55 share
drwxr-xr-x  2 root root      90 7月   4 13:55 support-files
[root@c7-1 ~]#groupadd mysql
[root@c7-1 ~]#useradd -r -g mysql mysql
[root@c7-1 ~]#mkdir -p /data/mysql
[root@c7-1 ~]#chown mysql:mysql -R /data/mysql
[root@c7-1 ~]#vim /etc/my.cnf
[root@c7-1 ~]#cat /etc/my.cnf
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql5.7.37
datadir=/data/mysql
socket=/tmp/mysql.sock
symbolic-links=0
explicit_defaults_for_timestamp=true
character_set_server=utf8mb4
[mysqld_safe]
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
!includedir /etc/my.cnf.d
[root@c7-1 ~]#cd /usr/local/mysql5.7.37/bin/

### Khởi tạo và lấy mật khẩu
[root@c7-1 /usr/local/mysql5.7.37/bin]#./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql5.7.37/ --datadir=/data/mysql/ --user=mysql --initialize
2022-07-04T06:16:54.696189Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-07-04T06:16:54.726164Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-07-04T06:16:54.783186Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: e6b70fe2-fb60-11ec-8b81-000c294404bf.
2022-07-04T06:16:54.784227Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-07-04T06:16:55.314692Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-07-04T06:16:55.314709Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-07-04T06:16:55.321026Z 0 [Warning] CA certificate ca.pem is self signed.
2022-07-04T06:16:55.904729Z 1 [Note] A temporary password is generated for root@localhost: v?V<*ivir0Gz

### Khởi động mysql và thay đổi mật khẩu root
[root@c7-1 ~]#cp /usr/local/mysql5.7.37/support-files/mysql.server /etc/init.d/mysql

# Khởi động
[root@c7-1 ~]#service mysql start
Starting MySQL.Logging to '/data/mysql/mysql.err'.
 SUCCESS! 
[root@c7-1 ~]#ps -ef | grep mysql
root      99200      1  0 14:19 pts/1    00:00:00 /bin/sh /usr/local/mysql5.7.37/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/c7-1.pid
mysql     99425  99200  1 14:19 pts/1    00:00:00 /usr/local/mysql5.7.37/bin/mysqld --basedir=/usr/local/mysql5.7.37 --datadir=/data/mysql --plugin-dir=/usr/local/mysql5.7.37/lib/plugin --user=mysql --log-error=/data/mysql/mysql.err --pid-file=/data/mysql/c7-1.pid --socket=/tmp/mysql.sock --port=3306
root      99531   3295  0 14:20 pts/1    00:00:00 grep --color-auto mysql

# Thay đổi mật khẩu
[root@c7-1 /usr/local/mysql5.7.37/bin]#./mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37

mysql> SET PASSWORD = PASSWORD('120604');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

# Tạo liên kết mềm
[root@c7-1 /usr/local/mysql5.7.37/bin]#ln -s /usr/local/mysql5.7.37/bin/mysql /usr/local/bin/
[root@c7-1 /usr/local/mysql5.7.37/bin]#cd
[root@c7-1 ~]#mysql -uroot -p
......

  1. K3S sử dụng MySQL làm cơ sở dữ liệu ==================================

Cấp quyền truy cập MySQL từ xa

[root@c7-1 ~]#mysql -uroot -p
......

mysql> grant all privileges on *.* to 'root'@'%' identified by '120604' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

Tạo cơ sở dữ liệu k3s

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database k3s;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| k3s                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

Chỉnh sửa k3s.service và khởi động lại

[root@c7-1 ~]#vim /etc/systemd/system/k3s.service
[root@c7-1 ~]#cat /etc/systemd/system/k3s.service
[Unit]
Description=Lightweight Kubernetes
Documentation=https://k3s.io
Wants=network-online.target

[Install]
WantedBy=multi-user.target

[Service]
Type=notify
EnvironmentFile=-/etc/systemd/system/k3s.service.env
KillMode=process
Delegate=yes
LimitNOFILE=1048576
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
TimeoutStartSec=0
Restart=always
RestartSec=5s
ExecStartPre=-/sbin/modprobe br_netfilter
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/k3s server --docker --no-deploy traefik --datastore-endpoint=mysql://root:120604@tcp(192.168.10.20:3306)/k3s
[root@c7-1 ~]#systemctl daemon-reload
[root@c7-1 ~]#systemctl restart k3s
[root@c7-1 ~]#systemctl status k3s | grep active
   Active: active (running) since 一 2022-07-04 16:42:54 CST; 5min ago
[root@c7-1 ~]#mysql -uroot -p120604
......

mysql> use k3s;
Reading table information for completion of table and column names
Database changed
mysql> show tables;
+---------------+
| Tables_in_k3s |
+---------------+
| kine          |
+---------------+
1 row in set (0.00 sec)

  1. Tập lệnh cài đặt MySQL tự động ==============================
#!/bin/bash
## Có thể đặt gói phần mềm trong thư mục /opt để tránh thời gian tải xuống quá dài
function loginfo() {
if [[ $? -eq 0 ]];then
    echo -e "\033[32m[INFO][$(date +"%F %T")] $1 thành công! \033[0m"
else
    echo -e "\033[31m[ERROR][$(date +"%F %T")] $1 thất bại! \033[0m"
fi
}

function install_mysql() {
echo -e "\033[32mBắt đầu cài đặt mysql V5.7.37 ...\033[0m"

# Cài đặt phụ thuộc
sudo yum install libaio -y >/dev/null 2>&1
loginfo "cài đặt libaio"

BASE_DIR=$(pwd)
MYSQL_PKG_PATH=$BASE_DIR/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
DEPLOY_PATH="/opt"
USER=$(whoami)
GROUP=$(groups)
MYSQL_URL="http://49.232.8.65/mysql-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz"

# Tải xuống, giải nén và tạo thư mục
echo -e "\033[32mBắt đầu tải mysql V5.7.37 ...\033[0m"

if [[ -f ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz ]];then
    sudo tar xf ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C ${DEPLOY_PATH}/
else
    sudo curl -o ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz ${MYSQL_URL} >/dev/null 2>&1 && sudo tar xf ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C ${DEPLOY_PATH}/
fi
loginfo "tải phần mềm mysql"

if [[ -d ${DEPLOY_PATH}/mysql ]];then
    rm -rf ${DEPLOY_PATH}/mysql
fi
sudo ln -s ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64 ${DEPLOY_PATH}/mysql 
loginfo "tạo liên kết mềm thư mục mysql"
if [[ -d /data/mysql ]];then
    rm -rf /data/mysql
fi
sudo mkdir -p /data/mysql
loginfo "tạo thư mục dữ liệu mysql"

# Chỉnh sửa tập lệnh khởi động
sudo sed -i '46s#basedir=#basedir=/opt/mysql#' ${DEPLOY_PATH}/mysql/support-files/mysql.server
sudo sed -i '47s#datadir=#datadir=/data/mysql#' ${DEPLOY_PATH}/mysql/support-files/mysql.server
sudo cp ${DEPLOY_PATH}/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod 755 /etc/init.d/mysqld

# Tạo người dùng
if ! grep -q '^mysql:' /etc/group
then
    sudo groupadd mysql
    loginfo "tạo người dùng mysql"
fi

if ! grep -q '^mysql:' /etc/passwd
then
    sudo useradd -r -g mysql -s /bin/false mysql
    loginfo "tạo nhóm mysql"
fi

# Cấp quyền cho thư mục data và base
sudo chown -R ${USER}.${GROUP} ${DEPLOY_PATH}/mysql/
sudo chown -R ${USER}.${GROUP} /data/

if [ ! -f /usr/bin/mysql ]
then
    sudo ln -s /opt/mysql/bin/mysql /usr/bin/
fi

# Tạo tệp cấu hình
if [ -f /etc/my.cnf ]
then
    sudo rm -f /etc/my.cnf
fi
sudo bash -c "cat >> /etc/my.cnf" <<EOF
[mysqld]
datadir                             = /data/mysql
basedir                             = /opt/mysql
port                                = 3306
socket                              = /data/mysql/mysql.sock
pid-file                            = /data/mysql/mysql.pid
max_connections                     = 8000
max_connect_errors                  = 100000
max_user_connections                = 3000
check_proxy_users                   = on
mysql_native_password_proxy_users   = on
local_infile                        = OFF
symbolic-links                      = FALSE
group_concat_max_len                = 4294967295
max_join_size                       = 18446744073709551615
max_execution_time                  = 20000
lock_wait_timeout                   = 60
autocommit                          = 1
lower_case_table_names              = 1
thread_cache_size                   = 64
disabled_storage_engines            = "MyISAM,FEDERATED"
character_set_server                = utf8mb4
character-set-client-handshake      = FALSE
collation_server                    = utf8mb4_general_ci
init_connect                        = 'SET NAMES utf8mb4'
transaction-isolation               = "READ-COMMITTED"
explicit_defaults_for_timestamp     = ON
log_timestamps                      = SYSTEM
local_infile                        = OFF
event_scheduler                     = OFF
query_cache_type                    = OFF
query_cache_size                    = 0
sql_mode                            = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
log_error                           = /data/mysql/mysql.err
slow_query_log                      = ON
slow_query_log_file                 = /data/mysql/slow.log
long_query_time                     = 1
general_log                         = OFF
general_log_file                    = /data/mysql/general.log
expire_logs_days                    = 99
log-bin                             = /data/mysql/mysql-bin
log-bin-index                       = /data/mysql/mysql-bin.index
max_binlog_size                     = 500M
binlog_format                       = mixed
binlog_rows_query_log_events        = ON
binlog_cache_size                   = 128k
binlog_stmt_cache_size              = 128k
log-bin-trust-function-creators     = 1
max_binlog_cache_size               = 2G
max_binlog_stmt_cache_size          = 2G
relay_log                           = /data/mysql/relay
relay_log_index                     = /data/mysql/relay.index
max_relay_log_size                  = 500M
relay_log_purge                     = ON
relay_log_recovery                  = ON
server_id                           = 1
read_buffer_size                    = 1M
read_rnd_buffer_size                = 2M
sort_buffer_size                    = 64M
join_buffer_size                    = 64M
tmp_table_size                      = 64M
max_allowed_packet                  = 128M
max_heap_table_size                 = 64M
connect_timeout                     = 43200
wait_timeout                        = 43200
back_log                            = 512
interactive_timeout                 = 300
net_read_timeout                    = 30
net_write_timeout                   = 30
skip_external_locking               = ON
key_buffer_size                     = 16M
bulk_insert_buffer_size             = 16M
concurrent_insert                   = ALWAYS
open_files_limit                    = 65000
table_open_cache                    = 16000
table_definition_cache              = 16000
default_storage_engine              = InnoDB
default_tmp_storage_engine          = InnoDB
internal_tmp_disk_storage_engine    = InnoDB
[client]
socket                              = /data/mysql/mysql.sock
default_character_set               = utf8mb4
[mysql]
default_character_set               = utf8mb4
[ndatad default]
TransactionDeadLockDetectionTimeOut = 20000
EOF
sudo chown -R ${USER}.${GROUP} /etc/my.cnf
loginfo "cấu hình my.cnf"

# Khởi tạo
${DEPLOY_PATH}/mysql/bin/mysqld --initialize --user=mysql --basedir=${DEPLOY_PATH}/mysql --datadir=/data/mysql 
loginfo "khởi tạo mysql"

# Lọc mật khẩu ban đầu
mysql_passwd=$(grep 'A temporary password is generated' /data/mysql/mysql.err |awk '{print $NF}')

# Khởi động dịch vụ
/etc/init.d/mysqld start
loginfo "khởi động mysqld"

# Thay đổi mật khẩu ban đầu
${DEPLOY_PATH}/mysql/bin/mysqladmin -uroot -p${mysql_passwd} password '120604'
if [ $? -ne 0 ];then
    loginfo "khởi tạo mật khẩu root"
fi

# Biến môi trường client
echo "export PATH=\$PATH:${DEPLOY_PATH}/mysql/bin" | sudo tee /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
loginfo "cấu hình môi trường"
}

install_mysql

  1. Sử dụng tập lệnh cài đặt chính thức của K3S với MySQL làm backend =================================================================

Tập lệnh cài đặt tự động

#!/bin/bash

# Định nghĩa biến
local_ip=`hostname -I | awk '{print $1}'`

### Cấu hình môi trường
systemctl stop firewalld && systemctl disable firewalld && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
yum install ntpdate -y && ntpdate time.windows.com

### Cài đặt docker
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
yum -y install yum-utils device-mapper-persistemt-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce docker-ce-cli containerd.io
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://4iv7219l.mirror.aliyuncs.com"]
}
EOF
grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
sudo systemctl daemon-reload
sysctl -p
systemctl enable docker && systemctl restart docker

### Cài đặt mysql-5.7.37, tham khảo các bước trên
function loginfo() {
if [[ $? -eq 0 ]];then
    echo -e "\033[32m[INFO][$(date +"%F %T")] $1 thành công! \033[0m"
else
    echo -e "\033[31m[ERROR][$(date +"%F %T")] $1 thất bại! \033[0m"
fi
}

function install_mysql() {
echo -e "\033[32mBắt đầu cài đặt mysql V5.7.37 ...\033[0m"

# Cài đặt phụ thuộc
sudo yum install libaio -y >/dev/null 2>&1
loginfo "cài đặt libaio"

BASE_DIR=$(pwd)
MYSQL_PKG_PATH=$BASE_DIR/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
DEPLOY_PATH="/opt"
USER=$(whoami)
GROUP=$(groups)
MYSQL_URL="http://49.232.8.65/mysql-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz"

# Tải xuống, giải nén và tạo thư mục
echo -e "\033[32mBắt đầu tải mysql V5.7.37 ...\033[0m"

if [[ -f ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz ]];then
    sudo tar xf ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C ${DEPLOY_PATH}/
else
    sudo curl -o ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz ${MYSQL_URL} >/dev/null 2>&1 && sudo tar xf ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C ${DEPLOY_PATH}/
fi
loginfo "tải phần mềm mysql"

if [[ -d ${DEPLOY_PATH}/mysql ]];then
    rm -rf ${DEPLOY_PATH}/mysql
fi
sudo ln -s ${DEPLOY_PATH}/mysql-5.7.37-linux-glibc2.12-x86_64 ${DEPLOY_PATH}/mysql 
loginfo "tạo liên kết mềm thư mục mysql"
if [[ -d /data/mysql ]];then
    rm -rf /data/mysql
fi
sudo mkdir -p /data/mysql
loginfo "tạo thư mục dữ liệu mysql"

# Chỉnh sửa tập lệnh khởi động
sudo sed -i '46s#basedir=#basedir=/opt/mysql#' ${DEPLOY_PATH}/mysql/support-files/mysql.server
sudo sed -i '47s#datadir=#datadir=/data/mysql#' ${DEPLOY_PATH}/mysql/support-files/mysql.server
sudo cp ${DEPLOY_PATH}/mysql/support-files/mysql.server /etc/init.d/mysqld
sudo chmod 755 /etc/init.d/mysqld

# Tạo người dùng
if ! grep -q '^mysql:' /etc/group
then
    sudo groupadd mysql
    loginfo "tạo người dùng mysql"
fi

if ! grep -q '^mysql:' /etc/passwd
then
    sudo useradd -r -g mysql -s /bin/false mysql
    loginfo "tạo nhóm mysql"
fi

# Cấp quyền cho thư mục data và base
sudo chown -R ${USER}.${GROUP} ${DEPLOY_PATH}/mysql/
sudo chown -R ${USER}.${GROUP} /data/

if [ ! -f /usr/bin/mysql ]
then
    sudo ln -s /opt/mysql/bin/mysql /usr/bin/
fi

# Tạo tệp cấu hình
if [ -f /etc/my.cnf ]
then
    sudo rm -f /etc/my.cnf
fi
sudo bash -c "cat >> /etc/my.cnf" <<EOF
[mysqld]
datadir                             = /data/mysql
basedir                             = /opt/mysql
port                                = 3306
socket                              = /data/mysql/mysql.sock
pid-file                            = /data/mysql/mysql.pid
max_connections                     = 8000
max_connect_errors                  = 100000
max_user_connections                = 3000
check_proxy_users                   = on
mysql_native_password_proxy_users   = on
local_infile                        = OFF
symbolic-links                      = FALSE
group_concat_max_len                = 4294967295
max_join_size                       = 18446744073709551615
max_execution_time                  = 20000
lock_wait_timeout                   = 60
autocommit                          = 1
lower_case_table_names              = 1
thread_cache_size                   = 64
disabled_storage_engines            = "MyISAM,FEDERATED"
character_set_server                = utf8mb4
character-set-client-handshake      = FALSE
collation_server                    = utf8mb4_general_ci
init_connect                        = 'SET NAMES utf8mb4'
transaction-isolation               = "READ-COMMITTED"
explicit_defaults_for_timestamp     = ON
log_timestamps                      = SYSTEM
local_infile                        = OFF
event_scheduler                     = OFF
query_cache_type                    = OFF
query_cache_size                    = 0
sql_mode                            = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO
log_error                           = /data/mysql/mysql.err
slow_query_log                      = ON
slow_query_log_file                 = /data/mysql/slow.log
long_query_time                     = 1
general_log                         = OFF
general_log_file                    = /data/mysql/general.log
expire_logs_days                    = 99
log-bin                             = /data/mysql/mysql-bin
log-bin-index                       = /data/mysql/mysql-bin.index
max_binlog_size                     = 500M
binlog_format                       = mixed
binlog_rows_query_log_events        = ON
binlog_cache_size                   = 128k
binlog_stmt_cache_size              = 128k
log-bin-trust-function-creators     = 1
max_binlog_cache_size               = 2G
max_binlog_stmt_cache_size          = 2G
relay_log                           = /data/mysql/relay
relay_log_index                     = /data/mysql/relay.index
max_relay_log_size                  = 500M
relay_log_purge                     = ON
relay_log_recovery                  = ON
server_id                           = 1
read_buffer_size                    = 1M
read_rnd_buffer_size                = 2M
sort_buffer_size                    = 64M
join_buffer_size                    = 64M
tmp_table_size                      = 64M
max_allowed_packet                  = 128M
max_heap_table_size                 = 64M
connect_timeout                     = 43200
wait_timeout                        = 43200
back_log                            = 512
interactive_timeout                 = 300
net_read_timeout                    = 30
net_write_timeout                   = 30
skip_external_locking               = ON
key_buffer_size                     = 16M
bulk_insert_buffer_size             = 16M
concurrent_insert                   = ALWAYS
open_files_limit                    = 65000
table_open_cache                    = 16000
table_definition_cache              = 16000
default_storage_engine              = InnoDB
default_tmp_storage_engine          = InnoDB
internal_tmp_disk_storage_engine    = InnoDB
[client]
socket                              = /data/mysql/mysql.sock
default_character_set               = utf8mb4
[mysql]
default_character_set               = utf8mb4
[ndatad default]
TransactionDeadLockDetectionTimeOut = 20000
EOF
sudo chown -R ${USER}.${GROUP} /etc/my.cnf
loginfo "cấu hình my.cnf"

# Khởi tạo
${DEPLOY_PATH}/mysql/bin/mysqld --initialize --user=mysql --basedir=${DEPLOY_PATH}/mysql --datadir=/data/mysql 
loginfo "khởi tạo mysql"

# Lọc mật khẩu ban đầu
mysql_passwd=$(grep 'A temporary password is generated' /data/mysql/mysql.err |awk '{print $NF}')

# Khởi động dịch vụ
cat >> /usr/lib/systemd/system/mysql.service << EOF
[Unit]
Description=MySQL Community Server
After=network.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/opt/mysql-5.7.37-linux-glibc2.12-x86_64/bin/mysqld --defaults-file=/etc/my.cnf --user=root
WorkingDirectory=/opt/mysql-5.7.37-linux-glibc2.12-x86_64/
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable mysqld && systemctl start mysqld
loginfo "khởi động mysqld"

# Thay đổi mật khẩu ban đầu
${DEPLOY_PATH}/mysql/bin/mysqladmin -uroot -p${mysql_passwd} password '120604'
if [ $? -ne 0 ];then
    loginfo "khởi tạo mật khẩu root"
fi

# Biến môi trường client
echo "export PATH=\$PATH:${DEPLOY_PATH}/mysql/bin" | sudo tee /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
loginfo "cấu hình môi trường"
}

install_mysql

# Tạo cơ sở dữ liệu k3s
mysql -uroot -p120604 -e "create database k3s;"

### Cài đặt k3s, sử dụng tập lệnh chính thức với tham số backend là mysql
curl -sfL http://49.232.8.65/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_VERSION=v1.22.5+k3s1 sh -s - --docker --datastore-endpoint='mysql://root:120604@tcp(${local_ip}:3306)/k3s'

systemctl status k3s
systemctl status docker
kubectl get nodes -o wide

[root@c7-1 ~]#mysql -uroot -p120604 -e "show tables in k3s;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+---------------+
| Tables_in_k3s |
+---------------+
| kine          |
+---------------+
[root@c7-1 ~]#kubectl get pods -A
NAMESPACE     NAME                                     READY   STATUS      RESTARTS   AGE
kube-system   coredns-85cb69466-8tpc7                  1/1     Running     0          4m42s
kube-system   local-path-provisioner-64ffb68fd-b86m2   1/1     Running     0          4m42s
kube-system   helm-install-traefik-crd--1-vlfst        0/1     Completed   0          4m43s
kube-system   metrics-server-9cf544f65-vgldv           1/1     Running     0          4m42s
kube-system   helm-install-traefik--1-9z6rw            0/1     Completed   0          4m43s
kube-system   svclb-traefik-mqfbf                      2/2     Running     0          115s
kube-system   traefik-786ff64748-q6fdn                 1/1     Running     0          115s
[root@c7-1 ~]#kubectl get nodes -o wide
NAME   STATUS   ROLES                  AGE     VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
c7-1   Ready    control-plane,master   5m19s   v1.22.5+k3s1   192.168.10.20   <none>        CentOS Linux 7 (Core)   3.10.0-1062.el7.x86_64   docker://20.10.17

Cài đặt cơ sở dữ liệu MySQL cho K3S và lưu trữ dữ liệu liên tục với Rancher

Sử dụng cơ sở dữ liệu bên ngoài với K3S để đạt khả năng sẵn cao

Thẻ: k3s mysql Kubernetes Database container

Đăng vào ngày 5 tháng 6 lúc 00:49