进入 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)