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

Logo

开源、云原生的融合云平台

更多推荐