DevOpsk8s系列文章--《kubernetes权威指南》学习笔记

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

2021-03-03  本文已影响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访问即可。

上一篇下一篇

猜你喜欢

热点阅读