kubernetes 部署 MySQL - k8s 部署 MySQL
k8s環境搭建
查考安裝地址《CentOS 7搭建---K8S集羣》
定義 MYSQL RC 配置
我們創建一個 mysql-rc.yaml 的文件,內容如下:
apiVersion: v1
kind: ReplicationController # 副本控制器 RC
metadata:
name: mysql # RC名稱,全局唯一
spec:
replicas: 1 # Pod副本期待數量
selector:
app: mysql # 符合目標 Pod擁有此標籤
template: # 根據此模板創建 Pod 的副本(實例)
metadata:
labels:
app: mysql # Pod 副本擁有的標籤,對應 RC 的Selector
spec:
containers: # Pod 內容的定義部分
- name: mysql #容器的名稱
image: mysql #容器對應的 Docker Image
ports:
- containerPort: 3306 # 容器暴露的端口號
hostPort: 3306 # 宿主機端口,外部可通過宿主機端口訪問mysql
env: # 注入到容器的環境變量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
修改環境配置
1.編輯vi /etc/kubernetes/kubelet(修改鏡像下載url)
修改前:KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
修改後:KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/tianyebj/pod-infrastructure:latest"
2.編輯/etc/kubernetes/apiserver
去除 KUBE_ADMISSION_CONTROL 中的 SecurityContextDeny,ServiceAccount ,並重啓kube-apiserver.service服務
# vim /etc/kubernetes/apiserver
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
# systemctl restart kube-apiserver.service
3.在k8s-client執行
yum install *rhsm*
重啓服務
systemctl restart kubelet docker kube-apiserver kube-controller-manager kube-scheduler
啓動mysql服務器並且查看狀態
[root@k8s-server ~]# kubectl create -f mysql-rc.yaml
replicationcontroller "mysql" created
[root@k8s-server ~]# kubectl describe pods mysql
Name: mysql-kwqb9
Namespace: default
Node: 127.0.0.1/127.0.0.1
Start Time: Sun, 12 Apr 2020 00:09:07 -0400
Labels: app=mysql
Status: Running
IP: 10.8.71.2
Controllers: ReplicationController/mysql
Containers:
mysql:
Container ID: docker://5cb3d769de0db84bea319833e3008c38ecd1f84b16687c293334148856d42d61
Image: mysql
Image ID: docker-pullable://docker.io/mysql@sha256:b69d0b62d02ee1eba8c7aeb32eba1bb678b6cfa4ccfb211a5d7931c7755dc4a8
Port: 3306/TCP
State: Running
Started: Sun, 12 Apr 2020 00:09:55 -0400
Ready: True
Restart Count: 0
Volume Mounts: <none>
Environment Variables:
MYSQL_ROOT_PASSWORD: 123456
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
9m 9m 1 {default-scheduler } Normal Scheduled Successfully assigned mysql-kwqb9 to 127.0.0.1
8m 8m 1 {kubelet 127.0.0.1} spec.containers{mysql} Normal Pulling pulling image "mysql"
8m 8m 2 {kubelet 127.0.0.1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
8m 8m 1 {kubelet 127.0.0.1} spec.containers{mysql} Normal Pulled Successfully pulled image "mysql"
8m 8m 1 {kubelet 127.0.0.1} spec.containers{mysql} Normal Created Created container with docker id 5cb3d769de0d; Security:[seccomp=unconfined]
8m 8m 1 {kubelet 127.0.0.1} spec.containers{mysql} Normal Started Started container with docker id 5cb3d769de0d
mysql使用
[root@k8s-server ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cb3d769de0d mysql "docker-entrypoint..." 15 minutes ago Up 14 minutes k8s_mysql.f6601b53_mysql-kwqb9_default_5ad8784f-7c73-11ea-ab08-000c297676f8_b07ca837
5954d7cf8d2d docker.io/tianyebj/pod-infrastructure:latest "/pod" 15 minutes ago Up 15 minutes k8s_POD.232c066b_mysql-kwqb9_default_5ad8784f-7c73-11ea-ab08-000c297676f8_9332af81
通過container id 進入到mysql容器中
[root@k8s-server ~]# docker exec -it 5cb3d769de0d /bin/bash
root@mysql-kwqb9:/#
登錄到mysql數據庫
mysql -uroot -p123456
root@mysql-kwqb9:/# mysql -uroot -p123456
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 10
Server version: 8.0.19 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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
1、然後在mysql中先更改加密方式,指令如下:
mysql>ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
2、然後再更改密碼,由於加密規則更改,所以需要重新設置密碼;
mysql>ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
3、給與root用戶全部權限;
mysql> grant all privileges on *.* to root;
4、最後在刷新一下數據庫;
mysql>FLUSH PRIVILEGES;
5、使用navicat連接數據庫中;