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

  本示例应用是一个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访问即可。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • k8s容器编排 [TOC] 1:k8s集群的安装 1.1 k8s的架构 除了核心组件,还有一些推荐的Add-ons...
    Zh_bd92阅读 4,459评论 0 0
  • k8s的架构 kubernetes集群核心组件 k8s集群的安装 官方文档 环境准备 做一些基础的优化后拍摄快照并...
    酷酷的伟阅读 6,276评论 0 15
  • k8s容器编排 1. k8s集群的安装 1.1 k8s的架构 除了核心组件,还有一些推荐的Add-ons: 1.2...
    藏鋒1013阅读 14,710评论 1 9
  • 原文地址:https://alphahinex.github.io/2020/10/18/deploy-first...
    AlphaHinex阅读 5,314评论 0 5
  • 1.kubernetes介绍 k8s是一个完备的分布式系统支持平台,k8s具有完备的集群管理能力,包括多层次的安全...
    宇晨棒棒的阅读 13,641评论 1 18

友情链接更多精彩内容