k8s系列文章5: k8s运行第一个应用

作者: 特斯拉的交流电很直 | 来源:发表于2021-03-03 23:10 被阅读0次

      本示例应用是一个java web的应用,结构比较简单,是一个运行在Tomcat里的Web app。为了演示简单,只要程序正确连接了数据库,就会自动完成对应的Table创建和初始化数据库的工作。在浏览器中访问此应用,就会显示一个表格的页面。
      此应用需要启动两个容器:web App容器和Mysql容器,并且Web App容器需要访问Mysql容器。

    1. 环境准备

      首先,安装k8s并下载相关镜像。参考前两篇文章:k8s系列文章3: kubeadm搭建k8s集群(上)k8s系列文章3: kubeadm搭建k8s集群(下)

    2. 启动Mysql服务

      首先,为Mysql服务创建一个RC定义文件mysql-rc.yaml:

    apiVersion: v1
    kind: ReplicationController                  #该文件是一个副本控制器
    metadata:
        name: mysql                              #副本的名称,全局唯一
    spec:
        replicas: 1                              #pod副本的期望数量
        selector:
            app: mysql                           #符合目标的pod拥有此标签
        template:                                #根据此模版创建pod副本
            metadata:
                labels:
                app: mysql                       #pod副本拥有的标签,对应RC的Selector
            spec:
                containers:                      #pod内容器的定义部分
                  - name: mysql
                    image: mysql:5.7             #此处书上《kubernetes权威指南》没有5.7,若不指定版本,将报错。
                    ports:
                     - containerPort: 3306
                    env:
                     - name: MYSQL_ROOT_PASSWORD
                       value: "123456"
    

      这里需要注意一点,spec.template.metadata.labels必须匹配之前的spec.selector.否则RC会一直创建无法匹配的pod,陷入恶性循环,直到将节点撑爆。
    创建好RC后,将其发布到集群中,在Master节点执行命令:

    kubectl create -f mysql-rc.yaml    # replicationcontroller "mysql" created
    

      查看刚刚创建的RC:

    kubectl get rc
    
    WechatIMG12.png

      运行下面的命令查看pod的创建情况:

    kubectl get pods
    

      通过docker ps在Node上查看,会发现已经有了docker容器在运行。
      最后,创建一个与之关联k8s Service--Mysql的定义文件(文件名为mysql-svc.yaml),完整定义内容如下:

    apiVersion: v1
    kind: Service        #表明这是k8s Service
    metadata:
        name: mysql      #Service的全局唯一名称
    spec:
        ports:
          - port: 3306
        selector:
            app: mysql
    

      运行命令,创建service:

    kubectl create -f mysql-svc.yaml
    

      运行命令查看刚刚创建的Service:

    kubectl get svc
    
    svc.png

      可以发现,mysql已经被分配了一个集群地址10.103.225.236。在集群中的其他pod就能直接通过这个地址访问mysql服务。

    3. 启动Tomcat应用

      和创建mysql服务rc类似,启动tomcat,首先创建tomcat的RC文件:

    apiVersion: v1
    kind: ReplicationController
    metadata:
         name: myweb
    spec:
        replicas: 2
        selector:
            app: myweb
        template:
            metadata:
                labels: 
                    app: myweb
            spec:
                containers:
                   - name: myweb
                     images: kubeguide/tomcat-app:v1
                     ports:
                       - containerPort: 8090
                     env:
                       - name: MYSQL_SERVICE_HOST
                         value: 10.103.225.236
    

      创建tomcat对应的Service文件,以下是完整的yaml定义文件:

    apiVersion: v1
    kind: Service
    metadata:
        name: myweb
    spec:
        type: NodePort
        ports:
          -port: 8080
           nodePort: 30001
        selector:
            app: myweb
    

      创建service:

    kubectl create -f myweb-svc.yaml
    

      至此,第一个应用就部署到k8s中了。通过浏览器可以直接访问。通过集群的Master节点+ip/demo访问即可。

    相关文章

      网友评论

        本文标题:k8s系列文章5: k8s运行第一个应用

        本文链接:https://www.haomeiwen.com/subject/aechqltx.html