zoukankan      html  css  js  c++  java
  • 容器基础(十): 使用kubernetes部署应用

    概述

    使用之前的脚本(env/server.py 得到 env/server:v0.1 镜像, env/worker.py 得到 env/worker:v0.1)得到的镜像,在部署好kubernetes的机器上进行测试。kubernetes-v1.12.2当前只部署在master上,且master的Taint已经被删除!基本的做法是:

    1. 配置一个server-rc.yml, 用于创建server端,全局只配置一个replicas;
    2. 配置一个server-svc.yml, 与server-rc.yml进行关联, 为server端分配VIP;
    3. 配置一个worker-rc.yml, 用于创建客户端, 可配置多个replicas, 用于和server进行通信;

    YAML脚本

     1 ➜  k8s  cat server-rc.yml 
     2 apiVersion: v1
     3 kind: ReplicationController
     4 metadata:
     5   name: server
     6 spec:
     7   replicas: 1
     8   selector:
     9     app: server
    10   template:
    11     metadata:
    12       labels:
    13         app: server
    14     spec:
    15       containers:
    16         - name: server
    17           image: env/server:v0.1
    18           ports:
    19           - containerPort: 3000
    20           env:
    21           - name: APP_PORT
    22             value: "3000"
    23 ➜  k8s  
     1 ➜  k8s  cat server-svc.yml 
     2 apiVersion: v1
     3 kind: Service
     4 metadata:
     5   name: server
     6 spec:
     7   ports:
     8     - port: 3000
     9   selector:
    10     app: server
    11 ➜  k8s  
     1 ➜  k8s  cat worker-rc.yml 
     2 apiVersion: v1
     3 kind: ReplicationController
     4 metadata:
     5   name: worker
     6 spec:
     7   replicas: 2
     8   selector:
     9     app: worker
    10   template:
    11     metadata:
    12       labels:
    13         app: worker
    14     spec:
    15       containers:
    16         - name: worker
    17           image: env/worker:v0.1
    18           ports:
    19           - containerPort: 3000
    20           env:
    21           - name: APP_DOMAIN
    22             value: "server"   # 传入service名字,后续脚本通过该名字从k8s获取到VIP
    23           - name: APP_PORT
    24             value: "3000"
    25 ➜  k8s  

    部署验证

    根据yaml文件创建rc/svc

     1 # create server-rc
     2 ➜  k8s  kubectl create -f server-rc.yml
     3 replicationcontroller/server created
     4 ➜  k8s  kubectl get rc
     5 NAME     DESIRED   CURRENT   READY   AGE
     6 server   1         1         1       15s
     7 
     8 # create service
     9 ➜  k8s  kubectl create -f server-svc.yml
    10 service/server created
    11 ➜  k8s  
    12 ➜  ~  kubectl get svc
    13 NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    14 kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP    24h
    15 server       ClusterIP   10.103.92.121   <none>        3000/TCP   38s
    16 ➜  ~  
    17 
    18 # create worker-rc
    19 ➜  k8s  kubectl create -f worker-rc.yml 
    20 replicationcontroller/worker created
    21 ➜  k8s  kubectl get rc
    22 NAME     DESIRED   CURRENT   READY   AGE
    23 server   1         1         1       14m
    24 worker   2         2         2       10s
    25 ➜  k8s  kubectl get pods
    26 NAME           READY   STATUS    RESTARTS   AGE
    27 server-x67sw   1/1     Running   0          14m
    28 worker-45qjt   1/1     Running   0          15s
    29 worker-gvwlt   1/1     Running   0          15s
    30 ➜  k8s  

    通过exec进入server/worker容器查看日志, 可以看到连接已经成功:

     1 ➜  k8s docker ps | grep python | awk '{print $1, $3 $4}'
     2 7b96a767637c "pythonworker.py"
     3 fb45f45be871 "pythonworker.py"
     4 e217df0ca52d "pythonserver.py"
     5 ➜  k8s docker exec -it e217df0ca52d /bin/bash
     6 root@server-x67sw:/env/server# ps -ef
     7 UID        PID  PPID  C STIME TTY          TIME CMD
     8 root         1     0  0 15:39 ?        00:00:00 python server.py
     9 root         7     0  0 15:40 pts/0    00:00:00 /bin/bash
    10 root        12     7  0 15:40 pts/0    00:00:00 ps -ef
    11 root@server-x67sw:/env/server# ls
    12 Dockerfile  log  server.py
    13 root@server-x67sw:/env/server# tail -f log/server.log 
    14 2018-12-06 15:39:56 [INFO]  Waiting for connection...
    15 2018-12-06 15:54:06 [INFO]  ('10.32.0.9', 51266) connected
    16 2018-12-06 15:54:06 [INFO]  ('10.32.0.10', 47969) connected
    17 ^C
    18 root@server-x67sw:/env/server# exit
    19 exit
    20 ➜  k8s docker exec -it 7b96a767637c /bin/bash
    21 root@worker-gvwlt:/env/worker# ps -ef
    22 UID        PID  PPID  C STIME TTY          TIME CMD
    23 root         1     0  0 15:54 ?        00:00:00 python worker.py
    24 root         6     0  0 15:57 pts/0    00:00:00 /bin/bash
    25 root        11     6  0 15:57 pts/0    00:00:00 ps -ef
    26 root@worker-gvwlt:/env/worker# tail -f log/worker.log 
    27 2018-12-06 15:56:31 [INFO]  [recv] hello, docker!
    28 ^C
    29 root@worker-gvwlt:/env/worker# exit
    30 exit
    31 ➜  k8s 

    在宿主机直接使用VIP访问server成功(使用original/worker进行测试, ip地址通过配置文件读入):

    1 ➜  worker  cat ini/config.ini | grep ip
    2 ip = 10.103.92.121 
    3 ➜  worker  python worker.py 
    4 [+][recv] hello, docker!
    5 [+][recv] hello, docker!
    6 ^C
    7 [-] signal(2) received, exit!
    8 ➜  worker 

    Excellence, is not an act, but a habit.
    作者:子厚.
    出处:http://www.cnblogs.com/aios/
    本文版权归作者和博客园共有,欢迎转载、交流、点赞、评论,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    graphics.drawRect()坐标解释
    点击上、下一页显示图片
    [笔记] systemverilog学习笔录
    [转帖]Verilog的语法及generate使用
    [笔记]ALTLVDS_TX和ALTLVDS_RX及Modelsim使用技巧
    [转帖]Quartus II中FPGA的管脚分配保存方法
    [笔记]8组LVDS_TX和LVDS_RX的调试心得
    [笔记]Altera中FIFO
    [笔记] 输入信号的边沿检测
    [笔记]systemverilog书本推荐
  • 原文地址:https://www.cnblogs.com/aios/p/10079515.html
Copyright © 2011-2022 走看看