本文简单记录了本人第一次尝试在k8s集群上部署Mysql项目的过程。相信大家应该都在自己的电脑中使用过mysql,而kubernetes是一个可自动部署、扩缩、管理容器化应用的工具,今天我们就来尝试一下在k8s集群中部署mysql数据库。

在kubernetes中部署mysql集群之前,应当有如下准备:

  1. 已部署完成kubernetes
  2. 集群中有mysql容器镜像

在已经搭建好的k8s集群上部署mysql服务主要步骤如下:

  1. 创建一个新的namespace

  2. 在该namespace下创建一个deployment

  3. 创建对应Service

  4. 验证效果

具体操作步骤如下:

1、创建一个新的namespace

我们可以通过命令行直接进行创建。

# kubectl create namespace try

2、在该namespace下创建一个deployment

作者使用yaml文件创建deployment与Service对象。值得一提的是yaml文件中的内容是声明式的,这些声明让kubernetes做你想要它做的事情。声明与命令有所不同,声明是告诉它你的需要是什么,而不涉及具体的实现的步骤。

首先我们要编写deployment的对应yaml文件。

(注意其中的空格一定要严格对齐,并且不能使用Tab键进行缩进操作)

# vim mysql-deployment.yaml
apiVersion: apps/v1 // 描述RC对象的版本是v1
    kind: Deployment  // 声明Deployment对象
    metadata: // metadata中的是对此对象的描述信息
      name: mysql-deployment
      namespace: try
    spec: // spec中是对资源对象的具体描述
      replicas: 1 // 创建1个副本
      selector: // 选择器,用来选择对象的
        matchLabels:
          app: mysql
      template: // 以下用来描述创建的pod的模版
        metadata:
          labels: // 给以下打上标签,以供selector来选择
            app: mysql
        spec: // 对pod模版的具体描述
          containers: // 放入pod模版中的容器
          - name: mysql
            image: mysql:5.6
            imagePullPolicy: IfNotPresent
            args:
              - "--ignore-db-dir=lost+found"
            ports:
            - containerPort: 3306
            env: // 给该容器设置环境变量
            - name: MYSQL_ROOT_PASSWORD // env中设置了mysql的root用户的密码为1234
              value: "1234"

之后直接创建deployment即可。

 # kubectl create -f mysql-deployment.yaml --record

理论上,deployment已经自动为我们部署好了replicaSet和pod。我们执行以下命令可以查看try namespace 下自动部署的replicaSet和pod。

 # kubectl get rs -n test
 # kubectl get pod -n test

3、创建对应服务

我们还需要一个Service对象来作为入口地址来对创建好的tomcat进行访问,所以,接下来我们的任务就是创建Service对象。

我们需要创建对应的service的yaml文件:mysql-svc.yaml。其中的重点在于三个端口的区别,容器有端口,Service有端口,node也有真实的端口号。因此需要注意定义type=NodePort,并有对应的nodeport端口号,以便集群外访问该服务。

详细yaml文件如下。

 apiVersion: v1
    kind: Service
    metadata:
      name: mysql-svc
      namespace: try
      labels:
        name: mysql-svc
    spec:
      type: NodePort
      ports:
      - port: 3306
        protocol: TCP
        targetPort: 3306
        name: http
        nodePort: 33306
      selector:
        app: mysql

之后我们通过命令行就可以创建对应的service了。

# kubectl create -f mysql-svc.yaml --record

4、远程登录验证

我们使用mysql远程工具navicat来验证k8s集群上是否已经正常跑着我们的项目。

其中,以本次项目为例,我们需要输入以下信息。

  • 主机:192.168.1.107(service对应的pod所在的node的ip)

  • 端口:33306(上面service中的nodeport端口号)

  • 密码:1234(deployment文件env中设置的root用户的密码)

在这里插入图片描述如果成功登录,代表该项目已经正常部署并运行。

事实上,我们也可以通过以下代码来查看目前集群的服务情况。

# kubectl get svc
Logo

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

更多推荐