概述

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

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

YAML脚本

 ➜  k8s  cat server-rc.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: server
spec:
replicas: 1
selector:
app: server
template:
metadata:
labels:
app: server
spec:
containers:
- name: server
image: env/server:v0.1
ports:
- containerPort: 3000
env:
- name: APP_PORT
value: "3000"
➜ k8s
 ➜  k8s  cat server-svc.yml
apiVersion: v1
kind: Service
metadata:
name: server
spec:
ports:
- port: 3000
selector:
app: server
➜ k8s
 ➜  k8s  cat worker-rc.yml
apiVersion: v1
kind: ReplicationController
metadata:
name: worker
spec:
replicas: 2
selector:
app: worker
template:
metadata:
labels:
app: worker
spec:
containers:
- name: worker
image: env/worker:v0.1
ports:
- containerPort: 3000
env:
- name: APP_DOMAIN
value: "server" # 传入service名字,后续脚本通过该名字从k8s获取到VIP
- name: APP_PORT
value: "3000"
➜ k8s

部署验证

根据yaml文件创建rc/svc

 # create server-rc
➜ k8s kubectl create -f server-rc.yml
replicationcontroller/server created
➜ k8s kubectl get rc
NAME DESIRED CURRENT READY AGE
server 1 1 1 15s # create service
➜ k8s kubectl create -f server-svc.yml
service/server created
➜ k8s
➜ ~ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
server ClusterIP 10.103.92.121 <none> 3000/TCP 38s
➜ ~ # create worker-rc
➜ k8s kubectl create -f worker-rc.yml
replicationcontroller/worker created
➜ k8s kubectl get rc
NAME DESIRED CURRENT READY AGE
server 1 1 1 14m
worker 2 2 2 10s
➜ k8s kubectl get pods
NAME READY STATUS RESTARTS AGE
server-x67sw 1/1 Running 0 14m
worker-45qjt 1/1 Running 0 15s
worker-gvwlt 1/1 Running 0 15s
➜ k8s

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

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

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

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

容器基础(十): 使用kubernetes部署应用的更多相关文章

  1. Kubernetes——基于容器技术的分布式架构领先方案,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩

    1.Kubernetes介绍 1.1 简介 Kubernetes是什么?首先,它是一个全新的基于容器技术的分布式架构领先方案.其次,它是一个开放的开发平台.最后,它是一个完备的分布式系统支撑平台.Ku ...

  2. Kubernetes容器化工具Kind实践部署Kubernetes v1.18.x 版本, 发布WordPress和MySQL

    Kind 介绍 Kind是Kubernetes In Docker的缩写,顾名思义是使用Docker容器作为Node并将Kubernetes部署至其中的一个工具.官方文档中也把Kind作为一种本地集群 ...

  3. Docker集群管理工具 - Kubernetes 部署记录 (运维小结)

    一.  Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...

  4. [转帖]两大容器管理平台,Kubernetes与OpenShift有什么区别?

    两大容器管理平台,Kubernetes与OpenShift有什么区别? https://www.sohu.com/a/327413642_100159565 原来openshift 就是 k8s的一个 ...

  5. 01 . 容器编排简介及Kubernetes核心概念

    Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器-Borg的一个开源版本,是Docker分布式系统解决方案.2014年由Google公司启动. Kubernetes提供了面 ...

  6. Kubernetes 部署 1.9.7 高可用版

    转载于https://codegreen.cn/2018/08/30/kubernetes-cluster-1.9.7/ 前言 在部署之前,首先感谢 手动搭建高可用的kubernetes 集群 博文的 ...

  7. Kubernetes 部署失败的 10 个最普遍原因

    [原文].后面我们可能还会看到一个 OOMKilled 错误. 我们的应用正在挂掉?为什么? 首先我们查看应用日志.假定你发送应用日志到 stdout(事实上你也应该这么做),你可以使用 kubect ...

  8. kubernetes部署spring cloud注册中心 Eureka

    系统环境 java JDK 1.8 Docker 18.09.6 kubernetes 1.16 创建Eureka Server 1.Maven引入相应的jar 引入 SpringBoot 做基础框架 ...

  9. Kubernetes部署通用手册 (支持版本1.19,1.18,1.17,1.16)

    Kubernetes平台环境规划 操作环境 rbac 划分(HA高可用双master部署实例) 本文穿插了ha 高可用部署的实例,当前章节设计的是ha部署双master 部署 内网ip 角色 安装软件 ...

随机推荐

  1. 我和我的广告前端代码(六):webpack工程合并、也许我不需要gulp

    随着年初开始使用webpack重构公司的广告代码,已经有将近一年的时间了,需求也渐渐的稳定了.我想也是时候将这几个工程整理一下,顺带着处理一些历史问题. 由于当年各个业务线没有整合.需求也没有固定,考 ...

  2. Code First 一

    Code-First和我们的数据库优先方式是相反的,数据库优先是通过数据库映射出相应的类和上下文,Code-First测试通过创建的类和上下文得到相应的数据库. Code-First主要用于领域驱动设 ...

  3. js获取站点根目录

    function getRootPath(){        var strFullPath=window.document.location.href;        var strPath=win ...

  4. [Windows]ping itsafe&环境变量

    (1)when you ping a computer from itsafe,the ping command should return the local IP address. (2)wind ...

  5. Struts2前期(这框架目前正处于淘汰状态)

    Struts2第一天 Struts2的学习路线 1. Struts2的入门:主要是学习Struts2的开发流程(Struts2的开发流程.常见的配置.Action类的编写) 2. Struts2的Se ...

  6. iOS | Swift图片剪切圆角

    我们在IOS开发中,时常需要将一些原本是方形的图片剪切成圆形或者边框是曲线的样子,表现得活泼生动一些. 注意:因为最近在尝试用Swiftl开发,所以这里的语言使用的就是Swift,OC的语法也是相近的 ...

  7. Angularjs基础(七)

    AngularJS表单 AngularJS表单时输入控件的集合HTML控件 一下HTML input 元素被称为HTML 控件: input 元素 select元素 button元素 textarea ...

  8. 如何在match中使用正则表达式

    这是在实现搜索功能的时候遇到的一个问题,在搜索的场景中,会根据搜索框中输入的内容,匹配出包含搜索内容的部分.简单模拟还原使用场景: 首先定义一个遍历 value 用来接收输入的内容 var value ...

  9. POST和GET请求区别

    最新博客站点:欢迎来访 1. 请求长度的限制 在HTTP协议中,从未规定GET/POST的请求长度限制,对于GET,对url的限制来源于浏览器或web服务器,浏览器和服务器限制了url的长度.因此,在 ...

  10. C++练习--实现客户机(CLIENT)类

    实现客户机(CLIENT)类. 定义字符型静态数据成员SeverName,保存其服务器名称: 整型静态数据成员ClientNum,记录已定义的客户数量: 定义静态函数ChangeSeverName() ...