Hello Dan/Aniket,
Thank you for chiming in. Will reply to your emails separately. Hopefully, the email below should answer some of the questions you have asked.
The following table captures all the configuration parameters that we have in ovn-k8s. Based on the subsystem they target, we have grouped them under several buckets -- Kubernetes, CNI, Logging, Gateway, and so on. (note: I have skipped some config parameters that are not ovn-k8s configuration file-based)
These are my definitions of `scope`:
OVN Network -> applies to the OVN logical topology that represents the primary interface to the pod.
(When we have support for multiple OVN interfaces to a pod, then these parameters will be different and
Will be captured in the respective network-attachment-definition CRD for that respective OVN interfaces)
GlobalMaster -> these parameters are same for all the ovnkube-master pods in the cluster
GlobalNode -> these parameters are same for all the ovnkube-node pods in the cluster
Per-Node -> these parameters "can" be different for every node in the cluster (see examples after the table).
(for simple deployments they can be same for all nodes, but for complex deployments they will be different)
Global -> these parameters are same for all ovnkube-master and ovnkube-node pods in the cluster
These are my definitions of `modifiability`:
Static -> Deployment time setting and the value will never change. If you have to change the value, then you will need to
delete all the ovn-k8s yamls, change the values, and re-deploy
Dynamic -> the setting can be changed at runtime. Your cluster scales over time and you see issues with scale and you want
to change the values at `runtime` without `daemon` restarts, if possible.
|------------+------------------------+--------------+---------------+-----------------------|
| section | config | scope (w.r.t | modifiability | comments |
| | | cluster) | | |
|------------+------------------------+--------------+---------------+-----------------------|
| Default | MTU | OVN Network | Static | |
| | Conntrack Zone | OVN Network | Static | |
| | EncapType | GlobalMaster | Static | |
| | EncapIP | Per-Node | Static | |
| | EncapPort | GlobalMaster | Static | |
| | OVNInactivityProbe | GlobalNode | Dynamic | ovn-controller's |
| | OpenFlowProbe | GlobalNode | Dynamic | ovn-controller's |
| | ClusterSubnets | OVN Network | Static | |
| | MetricsBindAddress | GlobalMaster | Static | for master |
| | MetricsBindAddress | GlobalNode | Static | for node |
| | MetricsEnablePprof | Global | Static | |
| | | | | |
| | | | | |
| Kubernetes | Kubecofnig | Global | Static | We don't need any |
| | APIServer | Global | Static | of these in ovn-k8s |
| | CACert | Global | Static | daemonset deployments |
| | Token | Global | Static | if we use |
| | | | | InClusterConfig() |
| | | | | |
| | ServiceCIDR | Global | Static | |
| | OVNConfigNamespace | Global | Static | |
| | OVNEmptyLbEvents | GlobalMaster | Dynamic? | |
| | RawNoHostSubnetNodes | GlobalMaster | Static | |
| | | | | |
| | | | | |
| Logging | LogFile | Global | Static | |
| | Level | Per-Node | Dynamic | |
| | | | | |
| CNI | ConfDir | GlobalNode | Static | |
| | Plugin | GlobalNode | Static | |
| | | | | |
| Gateway | Mode | Per-node | Dynamic | |
| | Interface | Per-node | Dynamic | |
| | NextHop | Per-node | Dynamic | |
| | VLANID | Per-node | Dynamic | |
| | NodeportEnable | Per-node | Dynamic | |
| | | | | |
| MasterHA | ElectionLeaseDuration | GlobalMaster | Dynamic | |
| | ElectionRenewDeadline | GlobalMaster | Dynamic | |
| | ElectionRetryPeriod | GlobalMaster | Dynamic | |
| | | | | |
| OVNDB | NBPort | Global | Static | |
| | SBPort | Global | Static | |
| | NBRaftPort | Global | Static | |
| | SBRaftPort | Global | Static | |
| | NBInactivityProbe | Global | Dynamic | |
| | SBInactivityProbe | Global | Dynamic | |
| | NorthDdInactivityProbe | Global | Dynamic | |
| | ClusterElectionTimer | Global | Dynamic | |
| | | | | |
|------------+------------------------+--------------+---------------+-----------------------|
Examples:
1. Per-node loglevel:
In a 600-node cluster, we need to debug a single misbehaving ovnkube-node daemon. To debug the issue, we need a way to change the klog level to 5 on that node's daemon alone and not on all of the nodes in the cluster.
2. Per-node gateway settings:
Imagine a DC with routed IP networks. The L2 networks do not span the physical network core. The L2 terminates at the Top-of-the-rack switch and everything else is L3 in the core. If a rack consists of 10 physical nodes and our cluster size is 100-nodes, then we will have 10 racks.
Each rack will have its own L2 underlay. So, the gateway nexthop and vlan-id will be different for every rack.
3. NodeportEnable settings:
In a 100-node cluster, we don't want to enable NodePorts on 80 of the nodes. We want LB/Ingress to go through only the 20 of the remaining nodes and nothing else
4. per-node encapIP settings
This is similar to point 2 above. Imagine having a single L2 across all 640 nodes in 64 racks in a DC and the amount of L2 packets on that underlay generated by the 640 nodes. So, L2/L3 boundary will be present in large datacenters.
Regards,
~Girish
On 3/23/20, 2:06 PM, "
ovn-kub...@googlegroups.com on behalf of Girish Moodalbail" <
ovn-kub...@googlegroups.com on behalf of
gmood...@nvidia.com> wrote:
External email: Use caution opening links or attachments