背景

在calico中,有多种网络资源。以v1.6.1为例,网络资源包含:node,bgpPeer,hostEndpoint,workloadEndpoint,ipPool,policy,profile等。

下面我将讲解如何使用calicoctl命令行工具来控制这些网络资源。

用法

create

创建一个网络资源。比如说我们要创建一个“profile” 的网络资源,那么先以json或者yaml的文件格式定义这个profile的属性,然后使用-f参数来指定。例如,属性文件名为profile1.json,其内容为:

{
"kind": "profile",
"apiVersion": "v1",
"metadata": {
"name": "calico-test",
"tags": [
"calico-test"
]
},
"spec": {
"ingress": [
{
"action": "allow",
"source": {
"tag": "calico-test"
},
"destination": {}
}
],
"egress": [
{
"action": "allow",
"source": {},
"destination": {}
}
]
}
}

使用calicoctl命令创建profile:

# calicoctl create -f profile1.json
Successfully created 1 'profile' resource(s)

另外,还可以使用-c选项来指定配置文件。

ps:这里需要注意的是,创建了calico网络之后,使用同一个calico网络的容器之间可以实现网络互通。但如果想让一个外部的节点也可以和这个calico网络互通,那么需要进行一些修改,在profile的spec.ingress中添加一个配置。

{
"action": "allow",
"source": {
"nets": [
"115.105.115.0/24"
]
},
"destination": {}
}

然后,再通过下面会讲到的“calicoctl replace”命令替换profile。这样,ip段位于"115.105.115.0/24"的docker host便可以访问该calico网络下的容器。

get

获取一个网络资源的信息。

这里我们也以上面创建的profile为例。

# calicoctl get profile calico-test -o json
[
{
"kind": "profile",
"apiVersion": "v1",
"metadata": {
"name": "calico-test",
"tags": [
"calico-test"
]
},
"spec": {
"ingress": [
{
"action": "allow",
"source": {
"tag": "calico-test"
},
"destination": {}
}
],
"egress": [
{
"action": "allow",
"source": {},
"destination": {}
}
]
}
}
]

这里是以json的格式来输出,还可以使用yaml、GoFormat等形式。

replace

替换一个网络资源。修改上述的profile1.json文件中的内容后,直接执行下面命令可以替换网络资源的相关属性。

# calicoctl replace -f profile1.json
Successfully replaced 1 'profile' resource(s)

apply

综合了create和replace命令。没有资源时就创建,有资源时就替换。

delete

删除一个网络资源。

创建替换网络资源时,都是通过文件来创建,而配置文件中都指明了网络资源的类型、属性等。但删除网络资源就简单多了,只需要通过网络资源的类型和名称就可以删除对应的资源。

# calicoctl delete profile calico-test
Successfully deleted 1 'profile' resource(s)

config

管理系统级别和节点级别的配置选项。

该命令下又包含三个子命令:set、unset和get。设置、取消和获取。

具体的设置项包含:logLevel(配置值有none,debug,info,warning,error,critical),nodeToNodeMesh(on,off),asNumber(0-4294967295),ipip(on,off)。

ipam

IP地址管理。

该命令下又包含三个子命令:release和show。其中:

  • release:释放已经被calico分配的IP;
  • show:显示分配IP的详细详细。

node

calico节点管理。

该命令下又包含四个子命令:run、status、diags和checksystem。其中:

  • run命令可用于在该服务器上运行一个calico实例;
  • status命令可检查整个calico网络的状态;
  • diags用于手机calico节点的诊断信息;
  • checksystem命令用于检查改服务器是否可以运行一个calico实例。

我们经常使用run命令来创建一个calico实例,比如:

# calicoctl node run --node-image=calico/node:v2.6.2 --ip=192.168.115.73
Running command to load modules: modprobe -a xt_set ip6_tables
Enabling IPv4 forwarding
Enabling IPv6 forwarding
Increasing conntrack limit
Removing old calico-node container (if running).
Running the following command to start calico-node: docker run --net=host --privileged --name=calico-node -d --restart=always -e NODENAME=dcos-agent1 -e CALICO_NETWORKING_BACKEND=bird -e CALICO_LIBNETWORK_ENABLED=true -e IP=192.168.115.73 -e ETCD_ENDPOINTS=http://192.168.115.111:2379 -v /var/log/calico:/var/log/calico -v /var/run/calico:/var/run/calico -v /lib/modules:/lib/modules -v /run:/run -v /run/docker/plugins:/run/docker/plugins -v /var/run/docker.sock:/var/run/docker.sock calico/node:v2.6.2 Image may take a short time to download if it is not available locally.
Container started, checking progress logs. Skipping datastore connection test
Using IPv4 address from environment: IP=109.105.115.73
IPv4 address 109.105.115.73 discovered on interface em1
No AS number configured on node resource, using global value
Using node name: dcos-agent1
Starting libnetwork service
Calico node started successfully

这里,使用了的calico镜像版本为calico/node:v2.6.2,通过日志可以看到其启动calico容器时的具体命令。

此外,“calicoctl node run”有相当多的选项可以使用,可以通过“calicoctl node run --help”来查看。但是,这些选项还不足够覆盖所有的calico自身的选项(如etcd的url等),我们可以配置/etc/calico/calicoctl.cfg文件来实现。当然,也可以配置到其他文件,再通过-f选项来指定该文件。配置文件的示例如下:

apiVersion: v1
kind: calicoApiConfig
metadata:
spec:
datastoreType: "etcdv2"
etcdEndpoints: "http://${etcd-ip1}:2379,http://${etcd-ip2}:2379"

version

展示版本。

选项

-h --help

显示帮助。

-l --log-level=

设置日志级别。日志级别包含:panic,fatal,error,warn,info,debug。默认是fatal级别。

最新文章

  1. RDLC报表数据工具栏关闭后打开方法
  2. oracle并发请求异常,运行时间超长(一般情况下锁表)
  3. luogg_java学习_04_数组
  4. FileUpload1上传控件
  5. StringGrid 实例5 本例功能:字体修改为居中,红色,20号
  6. 诅咒JavaScript之----ArcGIS JavaScript 点聚合 ClusterLayer
  7. poj 1338 Ugly Numbers
  8. 一些纯css3写的公司logo
  9. Spring-AOP和AspectJ的区别和联系
  10. 开源Web安全测试工具调研
  11. 【转载】之 破解 (【原创】Xenocode Postbuild 2009 加壳破解 (不断更新中...))
  12. 『转载』Debussy快速上手(Verdi相似)
  13. LinearLayout遇到的问题——利用LinearLayout做横向滑动冲突
  14. WARNING [Project: :app] To shrink resources you must also enable ProGuard
  15. Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理
  16. python操作kafka(confluent_kafka 生产)
  17. selenium 打开新标签页(非窗口)
  18. ssh 免密登录
  19. STL queue用法
  20. Lodop打印控件输出页码(超文本和纯文本页码)

热门文章

  1. LattePanda 项目之 P2.2 起飞条件检测系统(CLI & GUI)
  2. Android自己定义控件
  3. MyEclipse的实体关系设计
  4. Django-中介模型
  5. Kubernetes对象之Pod
  6. MVC上传多张图片
  7. IGP和EGP(转载)
  8. VC ++6.0英文版常用菜单使用参考【转载整理】
  9. 清除inline-block元素默认间距
  10. mac 中安装redis 以及 安装php-redis扩展过程详细记录