概述

使用之前的脚本(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. VMware虚拟机修改BIOS启动项

    vmware默认是硬盘启动,要进bios里面设置成开机的启动顺序,要将光盘设置成第一启动项.但vm的开机画面比笔记本的还要快很多,基本都在1s内的,想进入 bios里面也有难度.. 对于网上说的开vm ...

  2. JavaScript js调用堆栈(二)

    本文主要介绍JavaScript的内存空间 var a = 20; var b = 'abc'; var c = true; var d = { m: 20 } 首先需要对栈(stack),堆(hea ...

  3. IPv6静态路由、动态路由

    实验涉及命令以及知识补充 IPv6 接口必须配置 IPv6 地址和子网掩码 使用 ipv6 address ipv6-address/prefix-length [link-local | eui-6 ...

  4. 有连接服务&无连接服务

    面向连接的服务 通信双方在通信时要事先建立一条通信线路,其过程包括建立连接.使用链接.释放链接三个过程 如: TCP 电话 面向无连接的服务 通信双方不需要事先建立一条通信线路,而是把每个带有目的选址 ...

  5. Python语法糖

    1.装饰器 ####装饰器的固定格式 ##普通版本 def timer(func): def inner(*args,**kwargs): '''执行函数之前要做的''' ret = func(*ar ...

  6. iOS开发 | 自定义不规则label

    其中有一个不太规则的label:   image.png 这个label顶部的两个角是圆角,底部的两个角是直角,底部还有一个小三角. 思路 CAShapeLayer联合UIBezierPath画一个不 ...

  7. NEC 工程师规范

    工程师规范 - 开发准备 了解产品和设计 参加需求.交互.视觉会议,了解产品设计和项目成员. 了解产品面向的设备和平台. 了解产品对兼容性的要求以及是否采用响应式设计等. 了解产品要使用的技术(WEB ...

  8. CF练习记录

    2018/5/6 Codeforces Round #478 (Div. 2) C http://codeforces.com/contest/975/problem/C Valhalla Siege ...

  9. TcpServer 使用简介

    1.简介 1) Poco 的 TcpServer 是一个多线程的 Tcp 服务器. 服务器使用 ServerSocket(Poco 的一个用于初始化服务器的socket的类) 来接收链接.Server ...

  10. python 摘要算法

    一.概述: 摘要算法主要特征是加密过程不需要密钥,并且加密的数据无法解密,只有输入相同的明文数据经过相同的摘要算法才能得到相同的密文.摘要算法主要应用在“数字签名”领域.接下来会讲述RSA公司的MD5 ...