从Docker 1.10(以及libnetwork更新)开始,我们可以手动为用户定义网络中的容器提供IP,这很酷!
我想在LAN中为容器提供一个IP地址(就像我们可以在"桥接"模式下使用虚拟机).我的局域网是192.168.1.0/24,我的所有计算机都有IP地址.我希望我的容器具有此范围内的IP,以便从LAN中的任何位置(无NAT/PAT /等等)到达它们.
我显然读过Jessie Frazelle的博客文章,很多其他人在这里和所有地方发帖都喜欢:
还有更多,但没有出来; 我的容器仍然在我的docker主机"内部"有IP地址,并且我的LAN上的其他计算机无法访问.
阅读Jessie Frazelle的博客文章,我认为(因为她使用公共IP)我们可以做我想做的事情?
编辑:的确,如果我这样做:
network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 homenet
docker run --rm -it --net homenet --ip 192.168.1.100 nginx
Run Code Online (Sandbox Code Playgroud)
docker主机上的新接口(br- [a-z0-9] +)采用' - gateway'IP,这是我的路由器IP.在网络上的两台计算机上使用相同的IP ... BOOM
提前致谢.
编辑:我的设置的重点是实现(如果可能)以下内容:
我正在运行一个小的Kubernetes集群(用kubeadm构建),以评估我是否可以将Docker(旧)Swarm设置移动到k8s.我绝对需要的功能是能够为容器分配IP,就像我使用MacVlan一样.
在我目前的docker设置中,我正在使用MacVlan将我公司网络中的IP地址分配给某些容器,这样我就可以直接到达(没有反向代理),就好像它是任何物理服务器一样.我正在努力实现与k8s类似的东西.
我发现:
我的yaml文件是:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
nodeSelector:
kubernetes.io/hostname: k8s-slave-3
---
kind: Service
apiVersion: v1
metadata:
name: nginx-service
spec:
type: ClusterIP
selector:
app: nginx
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
externalIPs:
- A.B.C.D
Run Code Online (Sandbox Code Playgroud)
我跳的是我的服务将获得IP ABCD(这是我公司的网络之一).我的部署工作正常,因为我可以使用它的ClusterIP从k8s集群内部到达我的nginx容器.
我错过了什么?或者至少,我在哪里可以找到有关网络流量的信息,以查看数据包是否即将到来? …
我在裸机Debian上运行kubernetes(3个主人,2个工人,现在是PoC).我跟着k8s-hard-way,我在我的kubelet上遇到了以下问题:
无法获取"/system.slice/docker.service"的系统容器统计信息:无法获取"/system.slice/docker.service"的cgroup统计信息:无法获取"/system.slice/docker.service"的cgroup统计信息":无法获取"/system.slice/docker.service"的容器信息:未知容器"/system.slice/docker.service"
我对kubelet.service也有同样的信息.
我有一些关于这些cgroup的文件:
$ ls /sys/fs/cgroup/systemd/system.slice/docker.service
cgroup.clone_children cgroup.procs notify_on_release tasks
$ ls /sys/fs/cgroup/systemd/system.slice/kubelet.service/
cgroup.clone_children cgroup.procs notify_on_release tasks
Run Code Online (Sandbox Code Playgroud)
和管理员告诉我:
$ curl http://127.0.0.1:4194/validate
cAdvisor version:
OS version: Debian GNU/Linux 8 (jessie)
Kernel version: [Supported and recommended]
Kernel version is 3.16.0-4-amd64. Versions >= 2.6 are supported. 3.0+ are recommended.
Cgroup setup: [Supported and recommended]
Available cgroups: map[cpu:1 memory:1 freezer:1 net_prio:1 cpuset:1 cpuacct:1 devices:1 net_cls:1 blkio:1 perf_event:1]
Following cgroups are required: [cpu cpuacct]
Following other …Run Code Online (Sandbox Code Playgroud) 我正在编写一个CLI,使用elasticsearch-py库与elasticsearch进行交互.我正在尝试模拟elasticsearch-py函数,以便在不调用我的真实集群的情况下测试我的函数.
main.py
Escli继承了悬崖的App 阶级
class Escli(App):
_es = elasticsearch5.Elasticsearch()
Run Code Online (Sandbox Code Playgroud)
settings.py
from escli.main import Escli
class Settings:
def get(self, sections):
raise NotImplementedError()
class ClusterSettings(Settings):
def get(self, setting, persistency='transient'):
settings = Escli._es.cluster\
.get_settings(include_defaults=True, flat_settings=True)\
.get(persistency)\
.get(setting)
return settings
Run Code Online (Sandbox Code Playgroud)
settings_test.py
import escli.settings
class TestClusterSettings(TestCase):
def setUp(self):
self.patcher = patch('elasticsearch5.Elasticsearch')
self.MockClass = self.patcher.start()
def test_get(self):
# Note this is an empty dict to show my point
# it will contain childs dict to allow my .get(persistency).get(setting)
self.MockClass.return_value.cluster.get_settings.return_value …Run Code Online (Sandbox Code Playgroud) kubernetes ×2
networking ×2
cgroups ×1
docker ×1
kubeadm ×1
mocking ×1
python ×1
unit-testing ×1