Kubernetes mysql 部署安装

  首先需要创建mysql pod资源对象,再创建一个与之关联的mysql Service服务。

一.创建mysql pod

  先简单讲下,pod是k8s集群中最小单元,一个pod 可以有一个或多个容器,在大多数情况下,我们只会在Pod中运行一个容器。 首先mysql 创建一个pod, 使用yaml文件安装,yaml中的kind属性,用来表明此资源对象的类型,这里是一个RC资源对象类型。spec一节中是RC的相关属性定义,比如spec.selector是RC的Pod标签(label)选择器,即监控和管理拥有这些标签的Pod实例,确保当前集群上始终有且仅有replicas个pod实例在运行,这里replicas=1表示只能运行一个mysql pod实例。当集群中运行的pod数量小于replicas时,rc会根据spec.template一节中定义的Pod模板来生成一个新的pod实例。

  需要注意的是 spec.template.medadata.labels指定了该pod的标签,该lables必须匹配spec.selector,否则此RC每次创建了一个无法匹配Label的Pod,就会不停地尝试创建新的Pod。

  由于我创建的是单节点集群,就直接云本机中运行yaml文件,如果是多节点集群,需要在master节点执行下面的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"
      tolerations:
      - key: "node-role.kubernetes.io/master"
        operator: "Equal"
        value: ""
        effect: "NoSchedule"

  文件名:mysql-rc.yaml 放入opt文件夹下,使用kubectl命令创建

[root@k8s-host opt]# kubectl create -f ./mysql-rc.yaml
replicationcontroller/mysql-rc created

  1) 查看对象资源rc类型

[root@k8s-host opt]# kubectl get rc
NAME       DESIRED   CURRENT   READY   AGE
mysql-rc   1         1         0       78s

  2)查看pod创建情况, 状态为Running正常,创建成功。

[root@k8s-host opt]# kubectl get pods
NAME             READY   STATUS    RESTARTS   AGE
mysql-rc-4cvzg   1/1     Running   0          6s

二.创建mysql的servce服务

  下面创建一个服务,mysql-svc.yaml,这里的kind为Service 表明是一个k8s  Service,  metadata.name 为Service的全局唯一名称,mysql-svc为服务名称。 spec.selector确定了哪些Pod副本实例对应到本服务

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: 30000
  selector:
    name: mysql-pod

  运行kubectl命令,创建service

[root@k8s-host opt]# kubectl create -f ./mysql-svc.yaml
service/mysql-svc created

  3.查看创建的服务

    运行kubectl命令,可以查看刚刚创建的Service,mysql服务被分配了一个值为10.109.109.170的cluster-ip地址,这是一个虚地址,k8s集群中其他创建的pod就可以通过10.109.109.170 30000来连接和访问mysql服务了(内网)。通常情况下Cluster-ip是在service创建后由k8s系统自动分配的。

[root@k8s-host opt]# kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          4d23h
mysql-svc    NodePort    10.109.109.170   <none>        3306:30000/TCP   49s

 

三.容器中登录mysql

  执行 docker ps 命令,查看所有容器, 找到mysql的container id 标识,通过docker exec -it 进入容器中,登录mysql

[root@k8s-host opt]# docker exec -it 1d0b183a2181 /bin/bash
root@mysql-rc-4cvzg:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.20 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, 密码来自资源创建时指定的密码。这里看到mysql版本是 8.0.19

 

 四. 外部远程登录mysql

  先把mysql root用户限制从localhost改为%

mysql> 
mysql> alter user 'root'@'%' identified with mysql_native_password by'root';
Query OK, 0 rows affected (0.01 sec)

mysql> alter user 'root'@'%' identified by 'mysql';
Query OK, 0 rows affected (0.01 sec)

 

 

  要被k8s集群外的客户端访问(在外网),在mysql-svc1.yaml文件中已经设置了spec:type: NodePort  和  nodePort: 30000。 这样就能通过外网ip加端口访问了:

  在外面的windows电脑上访问,安装tcping,  默认云ip不能拼通,华为云设置,放开端口30000:

  

 

   最后使用windows上的客户端连接工具

    

 

  参考文献 :kubenetes权威指南

posted on 2022-12-27 10:35  花阴偷移  阅读(16)  评论(0编辑  收藏  举报

导航