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连接数据库中;