一个简单的例子

一、启动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

 

posted @ 2020-08-10 14:38  Bigberg  阅读(312)  评论(0编辑  收藏  举报