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权威指南