ovs ovn-controller 监听梳理

127 阅读5分钟

进入 kube-ovn ovs-ovn pod,可以看到如下进程



 ps -axu | grep -i -E "ovn|ovs"

nobody      1629  0.0  0.0   4164  2944 ?        Ss   Nov04   0:00 /bin/bash /kube-ovn/start-ovs.sh
nobody      1682  0.0  0.0  10472  2284 ?        S<s  Nov04   0:00 ovsdb-server: monitoring pid 1683 (healthy)
nobody      1683  0.1  0.0  11684  7276 ?        S<   Nov04   0:43 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
nobody      1744  0.0  0.0  14536  2732 ?        S<s  Nov04   0:00 ovs-vswitchd: monitoring pid 1745 (healthy)
nobody      1745  0.7  0.0 902016 13888 ?        S<l  Nov04   4:30 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
nobody      1817  0.0  0.0  16072  3212 ?        S<s  Nov04   0:00 ovn-controller: monitoring pid 1818 (healthy)
nobody      1818  0.0  0.0 315344 13580 ?        S<l  Nov04   0:11 ovn-controller unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --no-chdir --log-file=/var/log/ovn/ovn-controller.log --pidfile=/var/run/ovn/ovn-controller.pid --detach --monitor
nobody      1823  0.0  0.0   2300  1280 ?        S    Nov04   0:00 tail --follow=name --retry /var/log/ovn/ovn-controller.log
root        2506  0.0  0.0   4032  2944 ?        Ss   Nov04   0:00 bash /kube-ovn/start-cniserver.sh --enable-mirror=false --enable-arp-detect-ip-conflict=true --encap-checksum=true --service-cluster-ip-range=10.96.0.0/12 --iface= --dpdk-tunnel-iface=br-phy --network-type=geneve --default-interface-name= --logtostderr=false --alsologtostderr=true --log_file=/var/log/kube-ovn/kube-ovn-cni.log --log_file_max_size=200 --kubelet-dir=/var/lib/kubelet --enable-tproxy=false --ovs-vsctl-concurrency=100 --secure-serving=false --enable-ovn-ipsec=false --set-vxlan-tx-off=false
root        2540  0.8  0.4 1294544 66132 ?       Sl   Nov04   5:09 ./kube-ovn-daemon --ovs-socket=/run/openvswitch/db.sock --bind-socket=/run/openvswitch/kube-ovn-daemon.sock --enable-mirror=false --enable-arp-detect-ip-conflict=true --encap-checksum=true --service-cluster-ip-range=10.96.0.0/12 --iface= --dpdk-tunnel-iface=br-phy --network-type=geneve --default-interface-name= --logtostderr=false --alsologtostderr=true --log_file=/var/log/kube-ovn/kube-ovn-cni.log --log_file_max_size=200 --kubelet-dir=/var/lib/kubelet --enable-tproxy=false --ovs-vsctl-concurrency=100 --secure-serving=false --enable-ovn-ipsec=false --set-vxlan-tx-off=false
nobody      4780  0.6  0.3 1287572 58620 ?       Ssl  Nov04   4:07 /kube-ovn/kube-ovn-pinger --external-address=1.1.1.1 --external-dns=kube-ovn.io. --logtostderr=false --alsologtostderr=true --log_file=/var/log/kube-ovn/kube-ovn-pinger.log --log_file_max_size=200

梳理


# 1. ovs 启动

/bin/bash /kube-ovn/start-ovs.sh


# 2. ovsdb server 监控进程

ovsdb-server: monitoring pid 1683 (healthy)

# 3. ovsdb server 业务进程

ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor



punix

是一种用于指代 Unix 域套接字的缩写,它通常出现在计算机网络和编程中。在 Unix 和类 Unix 系统中,Unix 域套接字是一种用于在同一台机器上的进程之间进行通信的机制。

Unix 域套接字的特点 本地通信:Unix 域套接字仅用于本地进程间通信,与 Internet 协议(如 TCP/IP)不同,这种套接字不允许跨网络通信。

性能:由于 Unix 域套接字不需要 IP 协议栈的开销,它们通常比网络套接字更快,适用于本地进程之间的高效通信。

文件系统路径:Unix 域套接字使用文件系统中的路径来表示套接字地址,因此它们会出现在文件系统中,通常以 .sock 结尾。例如,/tmp/my_socket.sock。

双向通信:Unix 域套接字支持全双工通信(即允许同时发送和接收数据)。

pidfile

--pidfile: 这个选项指示 ovsdb-server 在启动时创建一个 PID 文件。PID 文件用于存储进程 ID(PID),便于系统或其他进程跟踪该服务是否在运行。确保 Open vSwitch 数据库服务器能够正确管理它的运行状态和生命周期。使用 PID 文件是 Unix 和类 Unix 系统中常见的实践,以帮助管理和监控服务进程。

detach

后台运行: 使用 --detach 启动进程后,该进程会在后台运行,而不会阻塞当前的终端会话。这意味着您可以继续使用终端而不会被该进程占用。

会话分离: 当进程在后台运行时,它与当前终端会话分离,从而即使关闭终端,该进程仍会继续运行。这对于需要持续运行的服务或守护进程非常重要。

不产生日志输出: 在很多情况下,后台运行的进程不会在终端输出日志,这些日志可能会被重定向到文件或以其他方式记录。

另外两个进程都是类似的管理逻辑:

ovs-vswitchd


ovs-vswitchd: monitoring pid 1745 (healthy)

ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor


ovn-controller


ovn-controller: monitoring pid 1818 (healthy)
 ovn-controller unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --no-chdir --log-file=/var/log/ovn/ovn-controller.log --pidfile=/var/run/ovn/ovn-controller.pid --detach --monitor
 

ovn-controller 和 ovs-vswitchd 都是通过 unix:/var/run/openvswitch/db.sock 和 ovsdb 交互。

ovn-controller 作为客户端和 ovn-central 进行交互,注册节点,拿到当前节点的逻辑流表,然后同步到 ovsdb。

ovs-vswitchd 从 ovsdb 中同步流表,下发到内核或者用户态

sock listen & connect


lsof /tmp/ovsdb-sb.sock
COMMAND      PID USER   FD   TYPE             DEVICE SIZE/OFF     NODE NAME
ovs.test 3059747 root   10u  unix 0xffff0001d711a800      0t0 74130665 /tmp/ovsdb-sb.sock type=STREAM (LISTEN)
ovs.test 3059747 root   12u  unix 0xffff0001d2914c00      0t0 74131577 /tmp/ovsdb-sb.sock type=STREAM (CONNECTED)