• 一个简单的例子


    一、启动MySQL服务

    1.1 为MySQL服务创建一个RC定义

    mysql-rc.yaml

    apiVersion: v1
    kind: ReplicationController         # 副本控制器RC
    metadata:
      name: mysql                       # RC的名称,全局唯一
    spec:
      replicas: 1                       # Pod副本的期待数量
      selector:
        app: mysql                      # 符合目标的Pod拥有此标签
      template:
       metadata:
         labels:
           app: mysql                   # Pod副本的标签,对应RC的Selector
       spec:
         containers:                    # Pod内容器的定义部分
         - name: mysql                  # 容器的名称
           image: mysql:5.6             # 容器对应的Docker Image
           imagePullPolicy: IfNotPresent
           ports:
           - containerPort: 3306        # 容器应用监听的端口号
           env:                         # 注入容器内的环境变量
           - name: MYSQL_ROOT_PASSWORD
             value: "123456"   

    1.2 发布到kubernetes集群

    创建RC

    kubectl create -f mysql-rc.yaml

    验证是否成功

    查看刚才创建的RC

    kubectl get rc
    NAME DESIRED CURRENT READY AGE mysql
    1 1 0 10s

    查看Pod创建情况

    kubectl get pod
    
    NAME          READY   STATUS    RESTARTS   AGE
    mysql-lh5dv   1/1     Running   0          2m39s

    二、创建MySQL Kubernetes Service

    2.1 定义一个service

    mysql-scv.yaml

    apiVersion: v1
    kind: Service          # 表明是 Kubernetes Service
    metadata:
      name: mysql          # Service 的全局唯一名称
    spec:
      ports:
        - port: 3306       # Service 提供服务的端口号
      selector:            # Service 对应的Pod拥有这里定义的标签
        app: mysql 

    2.2 创建Service

    kubectl create -f mysql-scv.yaml

    查看创建的Service

    kubectl get svc
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
    kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP    7h48m
    mysql        ClusterIP   10.109.55.96   <none>        3306/TCP   7s

    可以发现,MySQL服务被分配了一个值为10.109.55.96的Cluser IP地址。Kubernetes集群中其他Pod就能通过Service的Cluster IP + 端口号3306来访问mysql了。通常Cluster IP是系统自动分配的,因此需要一个服务发现机制来找到这个服务(Coer DNS就能通过Service的名称来发现该服务)。最初Kubernetes巧妙的使用Linux环境变量来解决了这个问题。根据Service的唯一名称,容器可以从环境变量中获取Service对应的Cluster IP地址和端口,从而发起TCP/IP连接请求。

    三、启动Tomcat应用

    3.1 创建对应的RC

    myweb-rc.yaml

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: myweb
    spec:
      replicas: 1
      selector:
        app: myweb
      template:
       metadata:
         labels:
           app: myweb
       spec:
         containers:
           - name: myweb
             image: kubeguide/tomcat-app:v1
             ports:
             - containerPort: 8080
             env:
             - name: MYSQL_SERVICE_HOST
               value: 'mysql'
             - name: MYSQL_SERVICE_PORT
               value: '3306' 

    在这里使用了环境变量的形式传入mysql的相关信息,更安全的方法是使用服务的名称mysql。

    3.2 将应用发布到集群

    # kubectl create -f myweb-rc.yaml
    
    
    # kubectl get rc
    NAME    DESIRED   CURRENT   READY   AGE
    mysql   1         1         1       22m
    myweb   1         1         0       28s

    3.3 创建对应的Service

    myweb-svc.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 
    service/myweb created

    查看service

    # kubectl get svc
    NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP          8h
    mysql        ClusterIP   10.109.55.96     <none>        3306/TCP         25m
    myweb        NodePort    10.111.193.215   <none>        8080:30001/TCP   53s

    至此一个应用例子搭建完成

    通过浏览器访问 nodeip:30001访问Tomcat

  • 相关阅读:
    Spring如何解决循环依赖的问题
    ast抽象树
    js 全屏事件 参考三
    js 全屏事件 参考一
    html video 标签
    justifycontent: end;不起作用
    Vue cli 2.x 3.x及4.x区别
    前端 后台管理 vue JavaScript 富文本编辑器
    js 全屏事件 参考二
    letterspacing属性对居中的影响
  • 原文地址:https://www.cnblogs.com/bigberg/p/13469637.html
Copyright © 2020-2023  润新知