kuma docker-compose 环境试用
当前官方暂时还没有使用docker-compose 运行kuma 的demo(太复杂没必要),但是做为一个本地的测试环境使用
docker-compose 运行下通用模式的kuma 还有比较有意义的,可以了解下通信的原理。
环境组件说明
kuma 在通用模式运行,需要以下几个组件:
- kuma-cp
- kuma-dp
- pg(状态存储)
- envoy (sidecar)
- kumactl (可选,方便命令连接的)
- 需要通过sidecart 访问的服务(使用官方的demo)
环境准备
- docker-compose 文件
version: "3"
services:
postgres:
image: postgres
ports:
- "5432:5432"
environment:
- "POSTGRES_PASSWORD=dalong"
- "POSTGRES_DB=kuma"
kuma-cp:
image: kong-docker-kuma-docker.bintray.io/kuma-cp:0.1.1
command: run --log-level=info
environment:
- "KUMA_STORE_TYPE=postgres"
- "KUMA_STORE_POSTGRES_HOST=postgres"
- "KUMA_BOOTSTRAP_SERVER_PARAMS_XDS_HOST=kuma-cp"
- "KUMA_STORE_POSTGRES_PORT=5432"
- "KUMA_STORE_POSTGRES_USER=postgres"
- "KUMA_STORE_POSTGRES_PASSWORD=dalong"
- "KUMA_STORE_POSTGRES_DB_NAME=kuma"
kuma-dp-echo:
build: ./
image: dalongrong/kuma-tcp-echo
volumes:
- "./service.yaml:/opt/service.yaml"
- "./config2:/tmp/kuma.io/envoy"
environment:
- "KUMA_DATAPLANE_ADMIN_PORT=9901"
- "KUMA_CONTROL_PLANE_BOOTSTRAP_SERVER_URL=http://kuma-cp:5682"
- "KUMA_DATAPLANE_MESH=default"
- "KUMA_DATAPLANE_NAME=dp-echo-1"
ports:
- "8000:8000"
- "10000:10000"
kuma-dp-echo2:
build: ./
image: dalongrong/kuma-tcp-echo
volumes:
- "./service2.yaml:/opt/service.yaml"
- "./config3:/tmp/kuma.io/envoy"
environment:
- "KUMA_DATAPLANE_ADMIN_PORT=9901"
- "KUMA_CONTROL_PLANE_BOOTSTRAP_SERVER_URL=http://kuma-cp:5682"
- "KUMA_DATAPLANE_MESH=default"
- "KUMA_DATAPLANE_NAME=dp-echo-2"
ports:
- "8001:8000"
- "10001:10000"
- kuma-dp dockerfile
因为在kuma-dp 实例中我们需要包含sidecar(eenvoy),服务,以及一个可选的kumactl,所以dockerfile
如下:
FROM kong-docker-kuma-docker.bintray.io/kuma-dp:0.1.1
COPY kuma-tcp-echo /usr/bin/kuma-tcp-echo
COPY envoy /usr/bin/envoy
COPY kumactl /usr/bin/kumactl
RUN chmod +x /usr/bin/kuma-tcp-echo && chmod +x /usr/bin/envoy && chmod +x /usr/bin/kumactl
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY config /config
ENTRYPOINT [ "/entrypoint.sh" ]
kumactl 需要一个配置文件 (类似kubectl),用来指定kuma-cp 的地址,内容如下:
contexts:
- controlPlane: local
name: local
controlPlanes:
- coordinates:
apiServer:
url: http://kuma-cp:5681
name: local
currentContext: local
entrypoint 容器入口:
为了启动方便,我们在entrypoint 中进行数据面板实体的注册,以及启动数据控制面板(有先后顺序的)
#!/bin/sh
cat /config
kumactl --config-file /config apply -f /opt/service.yaml
echo "run dp"
nohup kuma-tcp-echo &
kuma-dp run --log-level=debug
数据面板实体格式:
type 必须为Dataplane 当前mesh 为default(应该是为了支持多租户的),name 必须唯一,tags 指定角色
type: Dataplane
mesh: default
name: dp-echo-1
networking:
inbound:
- interface: 0.0.0.0:10000:8000
tags:
service: echo
- kuma-cp 以及kuma-dp 环境变量
对于kuma-cp 以及kuma-dp 启动的时候需要包含一些配置
kuma-cp 配置,主要是kuma-cp http 服务地址,xds 服务地址,对于通用模式状态存储的数据库配置,以及暴露的host 名称,我们可以通过环境
变量以及配置文件的方式修改,当前不太好的地方是数据库的表需要自己创建,看到官方在进行data schema 命令的添加
- "KUMA_STORE_TYPE=postgres"
- "KUMA_STORE_POSTGRES_HOST=postgres"
- "KUMA_BOOTSTRAP_SERVER_PARAMS_XDS_HOST=kuma-cp"
- "KUMA_STORE_POSTGRES_PORT=5432"
- "KUMA_STORE_POSTGRES_USER=postgres"
- "KUMA_STORE_POSTGRES_PASSWORD=dalong"
- "KUMA_STORE_POSTGRES_DB_NAME=kuma"
kuma-dp, 需要配置数据面板实体,xds 服务地址.envoy admin 端口
- "KUMA_DATAPLANE_ADMIN_PORT=9901"
- "KUMA_CONTROL_PLANE_BOOTSTRAP_SERVER_URL=http://kuma-cp:5682"
- "KUMA_DATAPLANE_MESH=default"
- "KUMA_DATAPLANE_NAME=dp-echo-1"
启动&&测试
- 启动数据库
可通过docker-entrypoint-initdb.d进行数据库数据库
docker-compose up -d postgres
创建数据库
CREATE TABLE IF NOT EXISTS resources (
name varchar(100) NOT NULL,
namespace varchar(100) NOT NULL,
mesh varchar(100) NOT NULL,
type varchar(100) NOT NULL,
version integer NOT NULL,
spec text,
PRIMARY KEY (name, namespace, mesh, type)
);
- 启动控制面板
dcoker-compose up -d kuma-cp
- 启动服务kuma-dp
docker-compose up -d kuma-dp-echo kuma-dp-echo2
- 测试效果
原始服访问:
curl http://localhost:8000
效果:
curl http://localhost:8000
GET / HTTP/1.1
Host: localhost:10000
User-Agent: curl/7.54.0
Accept: */*
通过sidecar 访问的服务
curl http://localhost:10000
效果:
curl http://localhost:10000
GET / HTTP/1.1
Host: localhost:10000
User-Agent: curl/7.54.0
Accept: */*
数据库内容:
参考资料
https://kuma.io/docs/0.1.1/documentation/#dataplane-specification
https://kuma.io/install/0.1.1/
https://github.com/rongfengliang/kuma-service-mesh-docker-compose
https://github.com/Kong/kuma/blob/master/install/postgres/resource.sql
kuma docker-compose 环境试用的更多相关文章
- docker compose环境搭建
概述 Docker Compose提供一个简单的基于YAML配置语言.用于描写叙述和组装多容器的分布式应用. 使用docker定义和执行复杂的应用.使用compose,能够在一个文件中,定义多容器的应 ...
- 附004.Docker Compose环境变量说明
一 环境变量概述 Compose支持在docker-compose执行命令的文件夹中,名为.env的环境变量配置文件声明默认环境变量. 二 定义变量 2.1 语法规则 Compose建议env文件中的 ...
- 附003.Docker Compose命令详解
一 Docker Compose命令格式 Usage: docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...] docker- ...
- Docker Compose 引用环境变量
在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景.本文集中介绍 docker compose 引用环境变量的方式.说明:本文的演示环境为 ubu ...
- [phvia/dkc] Docker Compose 快速构建(LNMP+Node)运行环境
快速构建(LNMP+Node)运行环境. dkc 在此作为 docker-compose 的缩写,你可以理解为 alias dkc=docker-compose 准备 安装 docker 选择1) 从 ...
- 利用Docker Compose快速搭建本地测试环境
前言 Compose是一个定义和运行多个Docker应用的工具,用一个YAML(dockder-compose.yml)文件就能配置我们的应用.然后用一个简单命令就能启动所有的服务.Compose编排 ...
- 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)
0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...
- Docker Compose 搭建 Redis Cluster 集群环境
在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
随机推荐
- 记:使用IScroll.js 开发picker日历组件遇到的问题及经验总结
IScroll中文文档 第一个问题: 边界留白 就是这种,上边界(最小),下边界(最大)有两个列表的位置是不能选择的.解决的办法是: 在HTML中,添加空白节点就行了. 第二个问题:初始化之后的滚动停 ...
- laravel 5.5 仓库模式 文件之间接口与实现操作
仓库模式 最直接的意思就是: Eloquent数据(数据库)查询 方便快捷,简单明了.自己怎么写的,就怎么去调用,完全ok~ 本质意思: 仓库就像是业务内部的数据对象集合,负责协调业务和数据映射层之 ...
- C#读写调整修改设置UVC摄像头画面-逆光对比
有时,我们需要在C#代码中对摄像头的逆光对比进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的 ...
- Android 8.0的平台上,应用不能对大部分的广播进行静态注册
引言在Android 8.0的平台上,应用不能对大部分的广播进行静态注册,也就是说,不能在AndroidManifest文件对有些广播进行静态注册,这里必须强调是有些广播,因为有些广播还是能够注册的. ...
- docker系列之一:初见docker
什么是docker? docker是目前linux最流行的容器技术,Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容器.程序在这个虚拟容器里运行,就好像在真 ...
- dubbo循序渐进 - nacos安装
1.安装docker ce yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-r ...
- nodejs vue的安装
1.https://nodejs.org/en/ 下载最新版nodejs 2.安装好后win+R输入cmd(管理员权限键入):node -v(node版本)npm -v(npm版本)查看版本号,如图所 ...
- Dalvik虚拟机结构——1
Dalvik核心内容:libdvm.so 主要有C语言实现,依赖于Linux内核的一部分功能:线程机制,内存管理机制,每一个Android应有都对应一个dalvik实例 Dalvik虚拟机功能:主要 ...
- Kafka Streams开发入门(5)
1. 背景 上一篇演示了split操作算子的用法.今天展示一下split的逆操作:merge.Merge算子的作用是把多股实时消息流合并到一个单一的流中. 2. 功能演示说明 假设我们有多个Kafka ...
- 排序算法的c++实现——快速排序
快速排序是分治思想的又一典型代表,是应用最广的排序算法.分治思想就是把原问题的解分解为两个或多个子问题解,求解出子问题的解之后再构造出原问题的解. 在快速排序算法中,它的思想是把一个待排序的数组分成前 ...