kubernetes叢集部署mysql 8.0
一、kubernetes叢集
二、部署mysql8.0
mysql可以以docker的形式在叢集內部署,也可以安裝在叢集之外,以服務的形式部署到叢集內。
(1)、如果是在叢集內部署,可以啟動一個ReplicationController,用以對mysql pod進行監控,並同時啟動一個Service,用以叢集訪問。
(2)、如果mysql是安裝在叢集之外,那麼可以啟動一個Endpoint和Service,將mysql引入叢集之中。
下面分別對這兩種方式進行部署。
1、叢集內安裝mysql
新建mysql-rc.yaml和mysql-svc.yaml,分別如下:
mysql-rc.yaml:
apiVersion: v1 kind: ReplicationController metadata: name: mysql-rc labels: name: mysql-rc spec: replicas: 1 selector: name: mysql-pod template: metadata: labels: name: mysql-pod spec: containers: - name: mysql image: mysql imagePullPolicy: IfNotPresent ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "mysql"
mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
labels:
name: mysql-svc
spec:
type: NodePort
ports:
- port: 3306
protocol: TCP
targetPort: 3306
name: http
nodePort: 33306
selector:
name: mysql-pod
在mysql-rc.yaml中,image引數可以指定mysql的版本,如8.0.11、5.7.22等。這裡省略了,表示用latest。另外,可以指定映象庫,這裡使用阿里雲映象庫,在安裝docker時進行了配置。env引數指定了mysql的root密碼。
在mysql-svc.yaml中,targetPort表示mysql pod中mysql視窗的目標埠,預設為3306,type型別為NodePort,表示將對映到本地埠,本地埠為nodePort: 33306。
接下來啟動ReplicationController和Service,執行以下命令:
kubectl create -f mysql-rc.yaml
kubectl create -f mysql-svc.yaml
啟動後可以檢視mysql部署在了哪個node上,執行以下命令可以檢視:
kubectl get pod -o wide
輸出如下,可以看到部署在了192.168.56.28 node中,這裡在部署kubernetes時用ip表示node的名稱。
遠端連線mysql8.0時可能會報一些錯誤,如navicat連線。這裡對mysql8.0作一些設定。
(1)、登入到192.168.56.28node中。
(2)、執行docker ps檢視mysql容器。如下所示:
(3)、進入mysql容器,執行以下命令進入容器,這裡container_id為458bb493e233
docker exec -it container_id /bin/bash
(4)、在容器內登入mysql。執行以下命令,-h為ip,容器內ip為127.0.0.1,-r為使用者名稱,-p為密碼,在mysql-rc中設定的密碼。
mysql -h127.0.0.1 -uroot -pmysql
(5)、對mysql進行如下設定。
alter user 'root'@'%' identified with mysql_native_password by'root';
alter user 'root'@'%' identified by 'mysql';
(6)、退出mysql和容器,執行quit;退出mysql,按ctrl+p後,再按ctrl+q從容器中返回node主機。
設定好mysql後,可以遠端連線node中的mysql,node的ip為192.168.56.28,對映的埠為33306,可以用navicat工具連線到這個myql。
2、叢集外安裝mysql
首先在叢集外的某個主機上安裝myql,並能在叢集所在的機器上訪問。這裡在192.168.56.8上用docker安裝了mysql,docker的啟動命令如下,繫結主機埠3306,並用以上方法同樣進行設定。
如需設計UTF-8,可在宿主機生成配置檔案/leesia/mysql/my.cnf,再掛載到容器中,配置如下:
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
配置後,執行如下命令,若將庫檔案儲存在宿主機,再增加-v <dir>:/var/lib/mysql,將宿主機目錄掛載到容器中。
docker run -d -p 3306:3306 -v /leesia/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=mysql --name docker-mysql mysql
新建mysql-out-svc.yaml,內容如下:
apiVersion: v1
kind: Service
metadata:
name: mysql-out-svc
spec:
ports:
- port: 3306
protocol: TCP
targetPort: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql-out-svc
subsets:
- addresses:
- ip: "192.168.56.8"
ports:
- port: 3306
執行以下命令啟動服務:
kubectl create -f mysql-out-svc.yaml
服務啟動後,將部署mysql部署到了kubernetes叢集之中。
可以執行以下命令檢視啟動的服務:
kubectl get svc
輸出如下,mysql-out-svc即是啟動的服務:
在叢集之中可以用CLUSTER-IP和PORT埠訪問服務,這裡的IP和埠分別是172.18.141.141和3306,可以在叢集內的某個容器中訪問到這個服務,例如可以在上面啟動的mysql容器中執行以下命令連線mysql-out-svc。
mysql -h172.18.141.141 -uroot -pmysql