01-正文
本章节下载: 01-正文 (1.38 MB)
目 录
6.1.4 通过NetworkConfiguration crd为Pod配置网络参数
6.3 通过definition crd为Pod配置网络、QoS与安全组等参数
6.3.1 通过NetworkAttachmentDefinition crd配置网络参数
6.3.4 通过Port crd为Pod配置网络IP地址参数
7.1 关于访问Service ClusterIP和NodePort的相关配置
Kubernetes是开源的容器集群管理平台,它支持自动化部署、大规模可伸缩、应用容器化管理。
Kubernetes使用Pod管理容器,Pod是一组紧密关联的容器集合,多个容器共享网络和文件系统,可以通过进程间通信和文件共享等简单高效的方式提供服务。
Kubernetes插件主要包含以下插件:
SDN CNI插件是针对控制组件推出的符合Kubernetes规范的网络插件,通过安装CNI插件可实现Kubernetes平台与控制组件的对接,Kubernetes平台中的Pod可在控制组件中上线,由控制组件提供流量监控、安全策略及网络服务等业务。
SDN Monitor插件是针对控制组件推出的容器网络运维服务插件,通过安装Monitor插件可实现Kubernetes平台与控制组件的对接,实现Kubernetes平台中的Pod在控制组件页面中的拓扑展示,并由控制组件提供自动化运维服务。
SDN Kubernetes插件所需的服务器或虚拟机硬件配置需求如表2-1所示。
|
CPU内核 |
内存 |
所需磁盘空间 |
|
4核及以上 |
8GB及以上 |
50GB及以上 |
SDN Kubernetes插件所需的软件配置需求如表2-2所示。
|
软件配置需求 |
备注 |
|
Kubernetes |
Kubernetes 1.9.x-1.28.1 |
|
vSwitch |
· 主机Overlay:S1020V的版本信息请参见控制组件版本说明书中的版本配套表 · 网络Overlay:Open vSwitch 2.9版本及以上。Open vSwitch与操作系统的内核版本配套关系如表2-3所示 |
表2-3 Open vSwitch版本与内核版本配套关系
|
Open vSwitch版本 |
Linux内核版本 |
|
2.9.x |
3.10-4.13 |
|
2.10.x |
3.16-4.17 |
|
2.11.x |
3.16-4.18 |
|
2.12.x |
3.16-5.0 |
|
2.13.x |
3.16-5.0 |
|
2.14.x |
3.16-5.5 |
|
2.15.x |
3.16-5.8 |
|
2.16.x |
3.16-5.8 |
|
2.17.x |
3.16-5.8 |
安装SDN Kubernetes插件前,需要对Kubernetes Node节点进行基础配置工作。
(1) 安装S1020V,具体操作步骤请参见S1020V虚拟交换机的安装指导。
(2) 在控制组件上配置VDS,并在节点上添加VDS相关配置,此处以vSwitch名称为vds1-br、上行口为eth1、VXLAN隧道口名称为vxlan_vds1-br、VTEP IP为100.0.100.100为例。配置完成后,各主机Overlay Node节点间VTEP IP可通。
$ ovs-vsctl add-br vds1-br
$ ovs-vsctl add-port vds1-br eth1
$ ovs-vsctl add-port vds1-br vxlan_vds1-br -- set interface vxlan_vds1-br type=vxlan options:remote_ip=flow options:local_ip=100.0.100.100 options:key=flow
$ ip link set vds1-br up
$ ip addr add 100.0.100.100/16 dev vds1-br
为了防止Node节点重启后VDS桥的IP地址丢失,可参考以下方式配置VDS桥地址。root用户下,vi编辑/etc/profile,非root用户需有/etc/profile写权限,并在下列命令前加sudo。按[i]键进入编辑模式,修改配置文件,文件末尾添加如下两行:
ip link set vds1-br up
ip addr add 100.0.100.100/16 dev vds1-br
修改完成后,按[ESC]键退出编辑模式,再输入:wq,按回车,保存配置文件并退出vi编辑器。
(3) 在控制组件上创建KVM类型的计算域,并关联VDS。
(4) 添加Node节点到计算域主机中。
(5) 在节点上配置指向Kubernetes ClusterIP的静态路由。
[root@master ~]# kubectl get service -A -owide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d18h <none>
例如 ClusterIP range是10.96.0.0/12,节点管理网卡为ens160,IP为10.10.0.11,网关为10.10.0.254,则配置如下静态路由:
ip route add 10.96.0.0/12 via 10.10.0.254 dev ens160
(1) 安装操作系统内核对应版本的Open vSwitch。Open vSwitch版本与操作系统内核版本的配套关系如表2-3所示。
$ yum install -y openvswitch
$ systemctl enable openvswitch.service
$ systemctl start openvswitch.service
(2) (可选)若Kubernetes为1.22及以上版本,请在Master节点上安装cfssl、cfssjson、cfssl-certinfo和jq工具,用于Webhook证书的生成。
(3) 在节点上安装并启动lldpd。
$ yum install -y lldpd
$ systemctl enable lldpd.service
$ systemctl start lldpd.service
(4) 在节点上添加Open vSwitch桥、配置OpenFlow版本、配置桥逃生模式,以Open vSwitch桥名为br-eno2为例。
$ ovs-vsctl add-br br-eno2
$ ovs-vsctl set bridge br-eno2 protocols=OpenFlow13
$ ovs-vsctl set-fail-mode br-eno2 secure
(5) 为Open vSwitch桥添加上行口,并设置上行口属性。以上行口为eno2为例。
$ ovs-vsctl add-port br-eno2 eno2
$ ovs-vsctl br-set-external-id br-eno2 uplinkInterface eno2
(6) 在裸金属中部署K8s时,需额外为OVS桥添加三个属性:控制组件上裸金属对应的虚拟端口(上线的业务口)的UUID,该虚拟端口所在虚拟链路层网络的UUID,以及K8s集群管理网网关(若K8s集群为双栈,K8s集群管理网网关,即managementNetworkGw需配置为双栈,IP地址以逗号隔开)。分别以1e10786f-f894-533f-838c-23c2766ed1d1、3c07b72c-4ee8-4b2a-aff2-cacb3d84c8f6和10.10.0.254为例。
$ ovs-vsctl br-set-external-id br-eno2 uplinkNetworkId 3c07b72c-4ee8-4b2a-aff2-cacb3d84c8f6
$ ovs-vsctl br-set-external-id br-eno2 uplinkPortId 1e10786f-f894-533f-838c-23c2766ed1d1
$ ovs-vsctl br-set-external-id br-eno2 managementNetworkGw 10.10.0.254
(7) 在OpenStack使用Trunk Port方式创建的虚拟机中部署K8s时,需额外为OVS桥添加六个属性:
¡ OpenStack上对应的Trunk Port的UUID,以1e10786f-f894-533f-838c-23c2766ed1d1为例
¡ 该Trunk Port所在虚拟链路层网络的UUID,以3c07b72c-4ee8-4b2a-aff2-cacb3d84c8f6为例
¡ K8s集群管理网网关,以10.10.0.254为例。若K8s集群为双栈,K8s集群管理网网关,即managementNetworkGw需配置为双栈,IP地址以逗号隔开
¡ 对接的云场景,仅支持OpenStack
¡ 虚拟化类型,仅支持KVM
¡ 可接受类型,仅支持Netoverlay
另外还需要在虚拟机所在的宿主机上配置lldpd服务,具体配置方式请参见步骤“(2)”。
$ ovs-vsctl br-set-external-id br-eno2 uplinkNetworkId 3c07b72c-4ee8-4b2a-aff2-cacb3d84c8f6
$ ovs-vsctl br-set-external-id br-eno2 uplinkPortId 1e10786f-f894-533f-838c-23c2766ed1d1
$ ovs-vsctl br-set-external-id br-eno2 managementNetworkGw 10.10.0.254
$ ovs-vsctl br-set-external-id br-eno2 cloud openstack
$ ovs-vsctl br-set-external-id br-eno2 virtType kvm
$ ovs-vsctl br-set-external-id br-eno2 accessType netoverlay
(8) 在OpenStack使用Ironic裸金属方式部署K8s时,需额外为OVS桥添加六个属性:
¡ OpenStack上对应的上行口Port的UUID,以1e10786f-f894-533f-838c-23c2766ed1d1为例
¡ 该上行口Port所在虚拟链路层网络的UUID,以3c07b72c-4ee8-4b2a-aff2-cacb3d84c8f6为例
¡ K8s集群管理网网关,以10.10.0.254为例。若K8s集群为双栈,K8s集群管理网网关,即managementNetworkGw需配置为双栈,IP地址以逗号隔开
¡ 对接的云场景,仅支持OpenStack
¡ 虚拟化类型,仅支持Ironic
¡ 可接受类型,仅支持Netoverlay
另外还需要在虚拟机所在的宿主机上配置lldpd服务,具体配置方式请参见步骤“(2)”。
$ ovs-vsctl br-set-external-id br-eno2 uplinkNetworkId 3c07b72c-4ee8-4b2a-aff2-cacb3d84c8f6
$ ovs-vsctl br-set-external-id br-eno2 uplinkPortId 1e10786f-f894-533f-838c-23c2766ed1d1
$ ovs-vsctl br-set-external-id br-eno2 managementNetworkGw 10.10.0.254
$ ovs-vsctl br-set-external-id br-eno2 cloud openstack
$ ovs-vsctl br-set-external-id br-eno2 virtType ironic
$ ovs-vsctl br-set-external-id br-eno2 accessType netoverlay
使用本章节的步骤分别在Master节点和Node节点上传并加载CNI插件的Docker镜像。
(1) 获取SDN CNI插件的Docker镜像软件包,并将软件包拷贝至服务器或虚拟机上的待安装目录下,或通过FTP、TFTP、SFTP等文件传输协议将软件包上传到指定目录。
· 使用FTP、TFTP方式上传时,请选择binary模式(二进制模式)传输,以免损坏软件包。
· 不同架构服务器使用不同镜像包,x86_64服务器使用SeerEngine_DC_NET_PLUGIN-version.tar.gz,ARM服务器使用SeerEngine_DC_NET_PLUGIN-version-ARM64.tar.gz。
· Docker和Containerd均使用Docker镜像进行加载。
(2) 解压软件包得到两个目录,CNI插件目录为SeerEngine_DC_NET_PLUGIN-version,cd至CNI插件目录。
$ tar -xzvf SeerEngine_DC_NET_PLUGIN-E6402.tar.gz
SeerEngine_DC_NET_PLUGIN-E6402
SeerEngine_DC_SDNC_MONITOR-E6402
$ cd SeerEngine_DC_NET_PLUGIN-E6402
SeerEngine_DC_NET_PLUGIN-E6402.tar
1.21minus/
1.21minus/SeerEngine_DC_NET_PLUGIN-E6402.yaml
1.21minus/SeerEngine_DC_NET_PLUGIN-E6402.crd.yaml
1.21minus/webhook-create-signed-cert.sh
1.22plus
1.22plus/SeerEngine_DC_NET_PLUGIN-E6402.yaml
1.22plus/SeerEngine_DC_NET_PLUGIN-E6402.crd.yaml
1.22plus/webhook-create-signed-cert.sh
vcfc2sdnc.sh
(3) 获取对应Kubernetes版本的CNI插件部署文件。
¡ 若安装的Kubernetes为1.22及以上版本,请使用1.22plus目录下的部署文件以及脚本。
¡ 若安装的Kubernetes为1.22以下版本,请使用1.21minus目录下的部署文件以及脚本。
(4) 加载CNI插件的Docker镜像,软件包名称格式为SeerEngine_DC_NET_PLUGIN-version.tar,其中version为版本号。
¡ 容器运行时为Docker
加载CNI插件的Docker镜像
$ docker load -i SeerEngine_DC_NET_PLUGIN-E6402.tar
查询是否加载成功
$ docker images
¡ 容器运行时为Containerd
加载CNI插件的Docker镜像
$ ctr -n k8s.io images import SeerEngine_DC_NET_PLUGIN-E6402.tar
查询是否加载成功
$ ctr –n k8s.io images ls
在Master节点和Node节点上完成Docker镜像的加载后,需要在Master节点上安装CNI插件,操作步骤如下:
(1) 获取预处理脚本,名称为webhook-create-signed-cert.sh,并上传到Master节点待安装目录下。
(2) 执行预处理脚本。多Master节点时只需要在其中一个节点上执行一次。
$ sh webhook-create-signed-cert.sh
(1) 获取SDN CNI插件的插件配置文件和SDN CNI插件的插件CRD配置文件,文件名称格式分别为SeerEngine_DC_NET_PLUGIN-version.yaml和SeerEngine_DC_NET_PLUGIN-version.crd.yaml,其中version为版本号。将文件拷贝至Master节点的待安装目录下,或通过FTP、TFTP、SFTP等文件传输协议将软件包上传到指定目录。多Master节点时只需要在其中一个节点上执行一次。
使用FTP、TFTP方式上传时,请选择binary模式(二进制模式)传输,以免损坏软件包。
(2) 通过vi编辑器打开配置文件。
$ vi SeerEngine_DC_NET_PLUGIN-E6402.yaml
(3) 按[i]键进入编辑模式,修改配置文件。修改完成后,按[ESC]键退出编辑模式,再输入:wq,按回车,保存配置文件并退出vi编辑器。
kind: ConfigMap
apiVersion: v1
metadata:
name: sdnc-net-plugin
namespace: kube-system
data:
etcd_servers: "https://192.168.0.10:2379,https://192.168.0.11:2379,https://192.168.0.12:2379"
etcd_certfile: "/etc/sdnc-net-plugin/etcd/server.crt"
etcd_keyfile: "/etc/sdnc-net-plugin/etcd/server.key"
etcd_cafile: "/etc/sdnc-net-plugin/etcd/ca.crt"
k8s_api_server: "https://192.168.0.20:6443"
k8s_ca: "/etc/sdnc-net-plugin/ca.crt"
k8s_key: "/etc/sdnc-net-plugin/apiserver-kubelet-client.key"
k8s_cert: "/etc/sdnc-net-plugin/apiserver-kubelet-client.crt"
k8s_token: ""
sdnc_url: "http://192.168.227.175:30000"
sdnc_domain: "sdn"
sdnc_client_timeout: "1800"
sdnc_client_retry: "10"
sdnc_cert_enable: "false"
sdnc_cafile: ""
sdnc_keyfile: ""
sdnc_certfile: ""
openstack_url: "http://99.0.13.16:5000/v3"
openstack_username: "admin"
openstack_password: "OPENSTACK_PASSWORD"
openstack_projectname: "admin"
openstack_projectdomain: "default"
openstack_client_timeout: "30"
openstack_client_retry: "10"
default_network_id: ""
log_dir: "/var/log/sdnc-net-plugin/"
log_level: "1"
bridge_mappings: "physnet1:br-physnet1:10:40,physnet2:br-physnet2"
warm_nic_minimum: "10"
warm_nic_target: "10"
warm_nic_threshold: "3"
---
kind: ConfigMap
apiVersion: v1
metadata:
name: sdnc-net-master
namespace: kube-system
data:
bind_host: "0.0.0.0"
bind_port: "9797"
protocol: "http"
webhook_bind_port: "9898"
cloud_network_vlanmap_preset: “false”
---
apiVersion: v1
kind: Secret
metadata:
name: sdnc-plugin-secret
namespace: kube-system
type: Opaque
data:
username: YWRtaW4=
password: UHdkQDEyMzQ1
---
kind: ConfigMap
apiVersion: v1
metadata:
name: sdnc-net-agent
namespace: kube-system
data:
overlay_mode: "auto"
default_security_policy: "permit"
host_networks: "192.168.10.0/24,192.168.2.0/24"
host_to_container_network: "172.70.0.0/16"
container_to_host_network: "172.60.0.0/16"
node_port_net_id: ""
default_mtu: "0"
sync_flows_interval: “0”
service_strategy: "0"
service_ip_cidr: "10.96.0.0/12"
enable_flows_pre_distribution: "true"
enable_nodeport_normal_forward: "false"
nodeport_local_source_cidr: ""
clusterIp_publish : “false”
cloud_region_name: ""
agent_host: "0.0.0.0"
agent_port: "9090"
sdnc_monitor_support: "false"
netoverlay_vlan_ranges: "master:1:10,node02:20:30"
warm_vlan_ranges: "master:5:10,node:20:25"
node_port_interface_type: "openvswitch_internal"
non_hierarchical_nodeport_vlan: "1024:1025"
ping_gateway_retry: "10"
warm_cool_down_time: "5"
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingWebhookConfiguration
metadata:
name: validation-webhook-cfg
labels:
app: admission-webhook-network
webhooks:
- name: validate.sdnc.io
failurePolicy: Fail
timeoutSeconds: 30
clientConfig:
service:
name: sdnc-net-master-webhook
namespace: kube-system
path: "/v1.0/validate"
caBundle: ""
rules:
- operations: [ "CREATE", "UPDATE", "DELETE" ]
apiGroups: ["sdnc.io"]
apiVersions: ["v1"]
resources: ["ipv4pools","ipv6pools","network-configurations"]
- operations: [ "CREATE", "UPDATE", "DELETE" ]
apiGroups: ["k8s.cni.cncf.io"]
apiVersions: ["v1"]
resources: ["network-attachment-definitions","qos-definitions","security-group-definitions","port-definitions"]
各参数含义如下:
¡ etcd_servers:etcd服务API接口地址,可配置etcd集群的多个地址,以逗号隔开,支持HTTP地址和HTTPS地址,当使用HTTPS地址时,需要配置参数etcd_certfile、etcd_keyfile、etcd_cafile(以https://192.168.0.10:2379,https://192.168.0.11:2379,https://192.168.0.12:2379为例),双栈时仅填写IPv4地址即可。
¡ etcd_certfile:etcd客户端x509证书文件,仅当etcd_servers使用HTTPS时生效。请将(以/etc/sdnc-net-plugin/etcd/server.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ etcd_keyfile:etcd客户端x509证书私钥文件,仅当etcd_servers为HTTPS地址时生效(以/etc/sdnc-net-plugin/etcd/server.key为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ etcd_cafile:etcd客户端CA文件,仅当etcd_servers使用HTTPS时生效(以/etc/sdnc-net-plugin/etcd/ca.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_api_server:K8s apiserver接口地址(以https://192.168.0.20:6443为例),双栈时仅填写IPv4地址即可。
¡ k8s_ca:K8s apiserver客户端CA文件,仅当k8s_api_server使用HTTPS时生效(以/etc/sdnc-net-plugin/ca.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_key:K8s apiserver客户端x509证书私钥文件,仅当k8s_api_server为HTTPS地址时生效,与k8s_cert配置项配合使用,当使用k8s_token认证时k8s_key无需配置(以/etc/sdnc-net-plugin/apiserver-kubelet-client.key为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_cert:K8s apiserver客户端x509证书文件,仅当k8s_api_server使用HTTPS时生效,当使用k8s_token认证时k8s_cert无需配置(以/etc/sdnc-net-plugin/apiserver-kubelet-client.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_token:K8s apiserver客户端认证Token,仅当k8s_api_server为HTTPS地址时生效。当使用k8s_key和k8s_cert认证时k8s_token无需配置。
¡ sdnc_url:统一数字底盘的登录地址(以http://192.168.227.175:30000为例)。
¡ sdnc_domain:控制组件所在域的域名(以sdn为例)。
¡ sdnc_client_timeout:等待控制组件响应的时间,单位为秒(以1800为例)。
¡ sdnc_client_retry:向控制组件发送连接请求消息的尝试次数(以10为例)。
¡ sdnc_cert_enable:对接统一数字底盘时,是否开启双向认证,如开启需配置为“true”,默认为空(不开启)。
¡ sdnc_cafile:对接统一数字底盘时,双向认证的ca根证书,需sdnc_cert_enable配置为“true”,默认为空。
¡ sdnc_certfile:对接统一数字底盘时,双向认证的客户端证书,需sdnc_cert_enable配置为“true”,默认为空。
¡ sdnc_keyfile:对接统一数字底盘时,双向认证的客户端密钥,需sdnc_cert_enable配置为“true”,默认为空。
¡ openstack_url:OpenStack Keystone的认证地址(以"http://99.0.88.40:5000/v3"为例)。
¡ openstack_username:OpenStack的登录用户名(以"admin"为例)。
¡ openstack_password:OpenStack的用户密码(即替换OPENSTACK_PASSWORD为OpenStack的用户密码)。
¡ openstack_projectname:OpenStack的项目名称(以"admin"为例)。
¡ openstack_projectdomain:OpenStack的项目所在域名称(以"default"为例)。
¡ openstack_client_timeout:等待OpenStack响应的时间,单位为秒(以30为例),建议与OpenStack插件超时时间保持一致。
¡ openstack_client_retry:向OpenStack发送连接请求消息的尝试次数(以10为例)。
¡ default_network_id:容器上线的默认虚拟链路层网络的UUID,当容器未配置虚拟链路层网络时,使用该虚拟链路层网络上线。
¡ log_dir:日志目录路径(以/var/log/sdnc-net-plugin/为例)。
¡ log_level:日志等级(以1为例)。
¡ bridge_mappings:对接OpenStack裸金属非层次化网络时,表示物理网络与非层次化网桥的映射关系,多个映射关系之间用“,”隔开;其他层次化上线场景时需要为空。以对接OpenStack裸金属非层次化网络时,取值physnet1:br-physnet1:10:40,physnet2:br-physnet2为例,表示配置了两个映射关系:
- 物理网络physnet1对应网桥br-physnet1;当K8s集群节点部署br-physnet1时,则表示使用物理网络physnet1;10:40表示物理网络的VLAN上下限,若不配置,则默认物理网络的VLAN上下限为1:4094。
- 物理网络physnet2对应网桥br-physnet2。物理网络的VLAN上下限为1:4094。
层次化网桥默认使用ovs-vsctl list-br命令显示出的最后一个网桥,在扩展节点物理网络时,对应网桥名称不能位于ovs-vsctl list-br的最后一个。
¡ warm_nic_minimum:对接OpenStack时,预热网络在每个节点预热的起始网卡数,取值范围为1~30的整数。
¡ warm_nic_target:对接OpenStack时,预热网络每次扩缩容的网卡数,取值范围为1~30的整数。
¡ warm_nic_threshold:对接OpenStack时,预热网络判断是否扩缩容的阈值,该值需小于warm_nic_minimum与warm_nic_target。
当节点预热网络已绑定的网卡数+ warm_nic_threshold≥当前节点预热网络已预热的网卡数,开始扩容;当节点预热网络空闲的网卡数- warm_nic_threshold≥2*warm_nic_target,开始缩容。
¡ bind_host:Master服务API接口绑定地址(以0.0.0.0为例)。
¡ bind_port:Master服务API接口绑定端口号,建议与net_master_port保持一致(以9797为例)。
¡ protocol:API接口协议,目前只支持HTTP。
¡ webhook_bind_port:webhook服务端口号,建议与webhook-port保持一致(以9898为例)。
¡ cloud_network_vlanmap_preset:OpenStack VLAN类型网络映射预设参数。缺省值为false,若设置为true,则会开启预设功能。在OpenStack上编排网络CRD场景时,需要将其设置为true。在创建与删除VLAN类型的网络CRD时,插件会自动更新OpenStack上相应网络的description,配置为vlan map格式。格式如下所示:
{"name":"openstack-cloud_region_name","vmVlan":1200,"vswitchVlan":1200,"action":"Add"}
¡ username(sdnc-plugin-secret):统一数字底盘的登录用户名,需要输入base64加密后的取值,加密命令为:echo -n 'username' |base64,以用户名为admin为例,加密后的取值为YWRtaW4=,解密命令为echo -n 'YWRtaW4='|base64 -d。
¡ password(sdnc-plugin-secret):统一数字底盘的用户名密码。需要输入base64加密后的取值,加密命令为:echo -n 'password' |base64,以密码为Pwd@12345为例,加密后的取值为UHdkQDEyMzQ1,解密命令为echo -n 'UHdkQDEyMzQ1'|base64 -d。
¡ overlay_mode:节点的Overlay模式,取值为net表示网络Overlay;取值为host表示主机Overlay;取值为auto表示根据Open vSwitch的配置情况自动判断Overlay模式(以auto为例)。
¡ default_security_policy:默认安全策略,仅在网络Overlay模式下生效,取值为permit表示允许;取值为deny表示拒绝(以permit为例)。
¡ host_networks:主机所在的网段,多个网段以逗号隔开(以192.168.10.0/24,192.168.2.0/24为例)。该配置项已不再维护,建议保持默认配置。
¡ host_to_container_network:主机访问容器时使用的NAT地址网段,该网段不能跟其他业务网段冲突(以172.70.0.0/16为例),裸金属场景下可以为空。该配置项已不再维护,建议保持默认配置。
¡ container_to_host_network:容器访问主机时使用的NAT地址网段,该网段不能跟其他业务网段冲突(以172.60.0.0/16为例),裸金属场景下可以为空。该配置项已不再维护,建议保持默认配置。
¡ node_port_net_id:为NodePort功能指定虚拟链路层网络的UUID,指定后将为每个节点自动上线一个虚拟端口,用来提供NodePort服务,不使用NodePort功能或裸金属场景时无需配置。
¡ default_mtu:容器网卡的默认MTU,缺省值为0,表示容器网卡MTU将被设置为1500。对接OpenStack可配置MTU为1450。
¡ sync_flows_interval:容器插件监测Endpoints及成员Pod变化后刷新流表的轮询间隔,单位为秒,缺省值为0,支持配置范围0~60内的整数。数值越低,刷新流表的响应越快,建议配置0~10之间。
¡ service_strategy:ClusterIP类型Service的负载均衡策略。取值为“0”表示选用基于源IP的负载均衡策略,取值为“1”表示选用基于源IP和源端口的负载均衡策略,缺省值为“0”。当开启流表预下发时不使能。该配置项已不再维护,建议保持默认配置。
¡ service_ip_cidr:K8s集群ClusterIp类型的Service地址段,以10.96.0.0/12为例。若K8s集群为双栈,该配置需设置为双栈,网段地址以逗号隔开,以10.96.0.0/12,fc00::/108为例。
¡ enable_flows_pre_distribution:是否为Service ClusterIP功能开启流表预下发,缺省值为“true”。关闭此功能(即关闭流表预下发)时,网络Overlay的Node个数必须大于1。若K8s集群为双栈或IPv6单栈,该参数需设置为“true”。
¡ enable_nodeport_normal_forward:是否为NodePort/Hostport开启预置normal流表,其中为NodePort开启预置normal流表时,externaltrafficpolicy需配置为Cluster。缺省值为false。配置为true时,仅支持enable_flows_pre_distribution为true时生效,此时转发性能提升。
¡ nodeport_local_source_cidr:当NodePort的externaltrafficpolicy属性为Local时,可配置此参数用于指定访问NodePort的客户端源网段。多个网段以英文逗号隔开,例如”5.0.0.0/32,6::0/64”,缺省值为空。仅在node_port_interface_type配置为openvswitch_internal且enable_flows_pre_distribution配置为true时生效,此时转发性能提升。
若配置了nodeport_local_source_cidr,且节点的OpenvSwitch版本大于2.9时,将自动添加openflow15协议,并为nodeport指向的ovs group设置负载算法为hash。可通过ovs-vsctl get Bridge {bridge-name} protocols查看协议族,通过ovs-ofctl dump-groups {bridge-name} -O openflow15查看ovs group。
¡ clusterIp_publish:是否开启向EVPN Fabric发布ClusterIP路由,缺省值false。设置为true时,上行口子网需绑定虚拟路由器,并为虚拟路由器绑定路由表。不支持node_port_interface_type配置为host_ip_link_vlan。不支持OpenStack场景。向EVPN Fabric发布的ClusterIP路由不支持IPv6类型静态路由。不支持主机后端的容器网络。不支持主机Overlay。当取值由true切换为false时,控制组件侧已下发的路由表项不会被删除。
¡ cloud_region_name:K8s集群对应的Cloud名称,以区分Cloud中不同的K8s集群,单K8s集群时可不填,默认为“”。
¡ agent_host:agent服务API接口绑定地址(以0.0.0.0为例)。
¡ agent_port:agent服务API接口绑定端口号(以9090为例)。
¡ sdnc_monitor_support:是否开启对接sdnc_monitor组件,缺省值为false;当配套部署sdnc_monitor组件时,需配置为true。
¡ netoverlay_vlan_ranges:网络Overlay Node节点的VLAN范围,格式为节点名称:VLAN_min:VLAN_max,多个范围之间以逗号隔开(以master:1:10,node:20:30为例)。当node_port_interface_type为host_ip_link_vlan方式时,节点的VLAN范围应排除节点上行口的PVID;默认节点VLAN范围为1-4094。
¡ warm_vlan_ranges:对接OpenStack虚机时,预热网络所使用的的VLAN范围,格式为节点名称:VLAN_min:VLAN_max,多个范围之间以逗号隔开(以master:5:10,node:20:25为例);warm_vlan_ranges的范围需要在netoverlay_vlan_ranges范围内,默认节点VLAN范围为3000-3500,其它场景置空即可。
¡ node_port_interface_type:NodePort的访问方式,支持配置host_ip_link_vlan和openvswitch_internal,默认配置openvswitch_internal,对接OpenStack虚机时仅支持openvswitch_internal。
- host_ip_link_vlan为VLAN网卡方式,上行口新增VLAN网卡,该方式需要OVS桥配置上线的虚拟端口的UUID、K8s集群管理网网关和开启Service ClusterIP流表预下发。
- openvswitch_internal为ovs cniOVSNode方式,OVS桥新增cniOVSNode。
¡ non_hierarchical_nodeport_vlan:OpenStack裸金属非层次化网络NodePort子接口的VLAN范围,格式为VLAN_min:VLAN_max,VLAN值不允许为上行口PVID。
对应VLAN网络需在OpenStack上提前创建(不配置子网),其他业务请勿使用此网络,并且该网络不下发、不映射在接口上,以防止与子接口的映射重叠。
¡ ping_gateway_retry:对接OpenStack的裸金属或虚拟机时,创建Pod后Ping网关的重试次数。
¡ warm_cool_down_time:对接OpenStack虚拟机时,预热网卡可使用的冷却时间,单位为秒。
¡ timeoutSeconds:等待webhook服务响应的时间,单位为秒,建议配置为30秒。仅在Kubernetes版本大于等于1.14时生效。若Kubernetes版本小于1.14,需要将该配置删除。
¡ caBundle:当前K8s集群的认证授权数据(certificate-authority-data),可以通过在Master节点执行命令kubectl config view --raw --flatten -o json获取,或通过Master节点/etc/kubernetes/admin.conf文件的certificate-authority-data值获取。
· 参数etcd_certfile、etcd_keyfile、etcd_cafile配置完成后,还需要在Master节点上将环境中的对应的etcd客户端证书文件、客户端证书密钥文件和证书签名文件拷贝到参数指定的路径中,然后将Master节点的该路径拷贝至所有的Node节点上。以kubeadm部署的k8s环境为例,etcd证书文件存放路径为/etc/kubernetes/pki/,不同的部署工具和版本可能会存在差异,需要以实际环境为准。
· 参数k8s_ca、k8s_key、k8s_cert配置完成后,还需要在Master节点将环境中的对应的k8s apiserver客户端证书文件、客户端证书密钥文件和证书签名文件拷贝到参数指定的路径中,然后将Master节点的该路径拷贝至所有的Node节点上。以kubeadm部署的k8s环境为例,k8s apiserver证书存放路径为/etc/kubernetes/pki/,不同的部署工具和版本可能会存在差异,需要以实际环境为准。
参数sdnc_url对接统一数字底盘时,因统一数字底盘的默认端口号为30000,与K8s默认的nodeport端口范围30000-32767存在冲突,可通过如下两种方式解决。
· 不在K8s上创建30000端口的nodeport。
· 修改K8s默认的nodeport范围。通过编辑/etc/kubernetes/manifests/kube-apiserver.yaml,配置- -service-node-port-range参数,为kube-apiserver指定nodeport范围,例如:- -service-node-port-range=10000-15000。修改完成后,保存退出文件,kube-apiserver-master pod将会自动加载参数并重启,在此期间K8s集群不可用。
在安装插件前,需根据K8s集群的版本修改插件配置文件中各资源的apiVersion参数。
使用配置文件安装插件。
$ kubectl create -f SeerEngine_DC_NET_PLUGIN-E6402.crd.yaml
$ kubectl create -f SeerEngine_DC_NET_PLUGIN-E6402.yaml
验证插件的Pod是否运行正常,如显示Running表示运行正常。
$ kubectl get pods -n kube-system |
grep sdnc
sdnc-net-agent-mtwkl 1/1 Running 0 5d7h
sdnc-net-agent-rt2s6 1/1 Running 0 5d7h
sdnc-net-master-79bc68885c-2s9jm 1/1 Running 0 5d7h
· 在安装插件后,请根据实际环境修改上行口的MAC地址。可将修改命令写入启动文件,防止重启后MAC地址发生变更。参考命令示例:ifconfig ens256 hw ether 00:50:56:aa:98:3a。
· 安装插件后,主机的hostname不允许修改。
插件的日志文件默认存放于每个节点的/var/log/sdnc-net-plugin目录,需要适时按需进行删除,防止日志文件过多。
在安装插件后,请勿删除日志目录中的软链接源与目的文件,否则需要重启插件。
卸载SDN CNI插件软件包,卸载前需删除所有用SDN CNI插件创建的Pod。
$ kubectl delete -f SeerEngine_DC_NET_PLUGIN-E6402.yaml
$ kubectl delete -f SeerEngine_DC_NET_PLUGIN-E6402.crd.yaml
具体操作步骤请参见“4.1.1 上传并加载CNI插件的Docker镜像”。
具体操作步骤请参见“4.1.2 2. 上传并修改配置文件”。
· 在升级插件时,请勿先删除旧.crd.yaml文件再创建新.crd.yaml文件,否则会导致集群中crd资源丢失。
· 若Kubernetes由1.21版本升级至1.22版本,在升级CNI插件前需要重新上传并执行预处理脚本webhook-create-signed-cert.sh,具体操作步骤请参见“4.1.2 1. 上传并执行预处理脚本,为sdnc-net-master插件中的Webhook服务提供证书”。
$ kubectl delete -f SeerEngine_DC_NET_PLUGIN-E6401.yaml
$ kubectl apply -f SeerEngine_DC_NET_PLUGIN-E6402.crd.yaml
$ kubectl create -f SeerEngine_DC_NET_PLUGIN-E6402.yaml
当原镜像名称为vcfc开头时,需要在Master节点上先卸载容器插件,并在Master节点上运行脚本vcfc2sdnc.sh。
使用本章节的步骤分别在Master节点上传并加载Monitor插件的Docker镜像。
(1) 获取SDN Monitor插件的Docker镜像软件包,并将软件包拷贝至服务器或虚拟机上的待安装目录下,或通过FTP、TFTP、SFTP等文件传输协议将软件包上传到指定目录。
· 使用FTP、TFTP方式上传时,请选择binary模式(二进制模式)传输,以免损坏软件包。
· 不同架构服务器使用不同镜像包,x86_64服务器使用SeerEngine_DC_NET_PLUGIN-version.tar.gz,ARM服务器使用SeerEngine_DC_NET_PLUGIN-version-ARM64.tar.gz。
· Docker和Containerd均使用Docker镜像进行加载。
(2) 解压软件包得到两个目录,Monitor插件目录为SeerEngine_DC_SDNC_MONITOR-version,cd至Monitor插件目录。
$ tar -xzvf SeerEngine_DC_NET_PLUGIN-E6402.tar.gz
SeerEngine_DC_NET_PLUGIN-E6402
SeerEngine_DC_SDNC_MONITOR-E6402
$ cd SeerEngine_DC_NET_PLUGIN-E6402
SeerEngine_DC_SDNC_MONITOR-E6402.tar
SeerEngine_DC_SDNC_MONITOR-E6402.yaml
sdnc_ca.crt
sdnc_monitor.crt
sdnc_monitor.key
(3) 加载Monitor插件的Docker镜像,软件包名称格式为SeerEngine_DC_SDNC_MONITOR-version.tar,其中version为版本号。
¡ 容器运行时为Docker
加载插件Docker镜像
$ docker load -i SeerEngine_DC_SDNC_MONITOR-E6402.tar
查询是否加载成功
$ docker images
¡ 容器运行时为Containerd
加载插件Docker镜像
$ ctr -n k8s.io images import SeerEngine_DC_SDNC_MONITOR-E6402.tar
查询是否加载成功
$ ctr–n k8s.io images ls
(1) 获取SDN Monitor插件的配置文件,文件名称格式为SeerEngine_DC_SDNC_MONITOR-version.yaml,其中version为版本号。将文件拷贝至Master节点的待安装目录下,或通过FTP、TFTP、SFTP等文件传输协议将软件包上传到指定目录。多Master节点时只需要在其中一个节点上执行一次。
· 使用FTP、TFTP方式上传时,请选择binary模式(二进制模式)传输,以免损坏软件包。
· 请保证部署Monitor插件的节点只有一条明细路由指向统一数字底盘。
(2) 通过vi编辑器打开配置文件。
$ vi SeerEngine_DC_SDNC_MONITOR-E6402.yaml
(3) 按[i]键进入编辑模式,修改配置文件。修改完成后,按[ESC]键退出编辑模式,再输入:wq,按回车,保存配置文件并退出vi编辑器。
kind: ConfigMap
apiVersion: v1
metadata:
name: sdnc-monitor-config
namespace: kube-system
data:
server_bind_host: "0.0.0.0"
server_bind_port: "11443"
server_protocol: "https"
server_cafile: "/etc/sdnc-monitor-config/sdnc_ca.crt"
server_certfile: "/etc/sdnc-monitor-config/sdnc_monitor.crt"
server_keyfile: "/etc/sdnc-monitor-config/sdnc_monitor.key"
k8s_api_server: "https://192.168.0.20:6443"
k8s_ca: "/etc/sdnc-monitor-config/ca.crt"
k8s_key: "/etc/sdnc-monitor-config/apiserver-kubelet-client.key"
k8s_cert: "/etc/sdnc-monitor-config/apiserver-kubelet-client.crt"
k8s_token: ""
sdnc_url: "http://192.168.227.175:30000"
sdnc_client_timeout: "1800"
sdnc_client_retry: "10"
sdnc_cert_enable: "false"
sdnc_cafile: ""
sdnc_keyfile: ""
sdnc_certfile: ""
sdnc_k8splatname: "k8s"
log_dir: "/var/log/sdnc-monitor/"
log_level: "1"
---
apiVersion: v1
kind: Secret
metadata:
name: sdnc-monitor-secret
namespace: kube-system
type: Opaque
data:
username: YWRtaW4=
password: UHdkQDEyMzQ1
各参数含义如下:
¡ server_bind_host:sdnc monitor服务API接口绑定地址(以0.0.0.0为例)。monitor单副本时,可配置节点上对接统一数字底盘的网卡IP。例如:统一数字底盘北向业务虚IP为192.168.227.175,节点对接统一数字底盘的网卡IP为192.168.227.100,即可配置为192.168.227.100;monitor多副本只支持配置0.0.0.0。
¡ server_bind_port:sdnc monitor服务API接口绑定端口号(以11443为例)。
¡ server_protocol:sdnc monitor服务协议(以https为例)。
¡ server_cafile:sdnc monitor服务端CA文件,仅当server_protocol使用HTTPS时生效(以/etc/sdnc-monitor-config/sdnc_ca.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ server_certfile:sdnc monitor服务端X509证书文件,仅当server_protocol使用HTTPS时生效(以/etc/sdnc-monitor-config/sdnc_monitor.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ server_keyfile:sdnc monitor服务端X509证书密钥文件,仅当server_protocol使用HTTPS时生效(以/etc/sdnc-monitor-config/sdnc_monitor.key为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_api_server:K8s apiserver接口地址(以https://192.168.0.20:6443为例)。
¡ k8s_ca:K8s apiserver客户端CA文件,仅当k8s_api_server使用HTTPS时生效(以/etc/sdnc-net-plugin/ca.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_key:K8s apiserver客户端x509证书私钥文件,仅当k8s_api_server为HTTPS地址时生效,与k8s_cert配置项配合使用,当使用k8s_token认证时k8s_key无需配置(以/etc/sdnc-net-plugin/client.key为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_cert:K8s apiserver客户端x509证书文件,仅当k8s_api_server使用HTTPS时生效,当使用k8s_token认证时k8s_cert无需配置(以/etc/sdnc-net-plugin/client.crt为例,如环境中不存在该路径,请手动创建,并设置权限为755)。
¡ k8s_token:K8s apiserver客户端认证Token,仅当k8s_api_server为HTTPS地址时生效。当使用k8s_key和k8s_cert认证时k8s_token无需配置。
¡ sdnc_url:统一数字底盘的登录地址(以http://192.168.227.175:30000为例)。
¡ sdnc_client_timeout:等待控制组件响应的时间,单位为秒(以1800为例)。
¡ sdnc_client_retry:向控制组件发送连接请求消息的尝试次数(以10为例)。
¡ sdnc_cert_enable:对接统一数字底盘时,是否开启双向认证,如开启需配置为“true”,默认为空(不开启)。
¡ sdnc_cafile:对接统一数字底盘时,双向认证的ca根证书,需sdnc_cert_enable配置为“true”,默认为空。
¡ sdnc_certfile:对接统一数字底盘时,双向认证的客户端证书,需sdnc_cert_enable配置为“true”,默认为空。
¡ sdnc_keyfile:对接统一数字底盘时,双向认证的客户端密钥,需sdnc_cert_enable配置为“true”,默认为空。
¡ sdnc_k8splatname:对接统一数字底盘时,定义的K8s平台名称,Monitor插件定期向统一数字底盘的K8s平台报送心跳(以k8s为例)。
¡ username(sdnc-monitor-secret):统一数字底盘的登录用户名,需要输入base64加密后的取值,加密命令为:echo -n 'username' |base64,以用户名为admin为例,加密后的取值为YWRtaW4=,解密命令为echo -n 'YWRtaW4='|base64 -d。
¡ password(sdnc-monitor-secret):统一数字底盘的用户名密码。需要输入base64加密后的取值,加密命令为:echo -n 'password' |base64,以密码为Pwd@12345为例,加密后的取值为UHdkQDEyMzQ1,解密命令为echo -n 'UHdkQDEyMzQ1'|base64 -d。
在安装Monitor插件前,需根据K8s集群的版本修改monitor配置文件中各资源的apiVersion参数。
使用配置文件安装Monitor插件。
$ kubectl create -f SeerEngine_DC_SDNC_MONITOR-E6402.yaml
验证插件的Pod是否运行正常,如显示Running表示运行正常。
$ kubectl get pods -n kube-system |
grep sdnc-monitor
sdnc-monitor-569c9b499c-c6d47 1/1 Running 0 5d7h
插件的日志文件默认存放于节点的/var/log/sdnc-monitor目录,需要适时按需进行删除,防止日志文件过多。
在安装插件后,请勿删除日志目录中的软链接源与目的文件,否则需要重启插件。
卸载SDN Monitor插件。
$ kubectl delete -f SeerEngine_DC_SDNC_MONITOR-E6402.yaml
具体操作步骤请参见“5.1.1 上传并加载Monitor插件的Docker镜像”。
具体操作步骤请参见“5.1.2 1. 上传并修改配置文件”。
$ kubectl delete -f SeerEngine_DC_SDNC_MONITOR-E6401.yaml
$ kubectl create -f SeerEngine_DC_SDNC_MONITOR-E6402.yaml
SDN CNI插件安装完成后,即完成了控制组件与Kubernetes的对接,可实现Kubernetes上的Pod在控制组件上线。为了保证Service扩容缩容时的稳定访问,建议在Kubernetes上为Pod配置探针监测功能。
本节介绍在Kubernetes上创建Pod并上线至控制组件的操作步骤。但建议通过definition crd为Pod配置网络参数,请参见“6.3 通过definition crd为Pod配置网络、QoS与安全组等参数”。
(1) 在控制组件上创建租户、虚拟链路层网络、子网、安全策略、网络策略等资源。
(2) 插件安装前需修改配置文件,在参数default_network_id中指定默认网络,配置方式参见“4.1.2 安装插件”。
(3) 在Master节点上创建Pod配置文件,文件名称以postgres-pod.yaml为例。
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
spec:
containers:
- name: postgres
image: postgres
(4) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(5) 创建完成后,在控制组件的虚拟端口页面可查看Pod的上线状态。
(1) 在控制组件上创建租户、虚拟链路层网络、子网、安全策略、网络策略等资源。如果在OpenStack网络Overlay虚拟机内部署集群或在OpenStack Ironic部署集群,需要在OpenStack上创建租户、虚拟链路层网络、子网等。
(2) 在Master节点上创建并修改Pod配置文件,文件名称以postgres-pod.yaml为例。原标签h3c.io/network_id、h3c.io/tenant_id、h3c.io/qos_policy_id和h3c.io/security_group_id仍可使用。
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
labels:
sdnc.io/network_id: 9e9af886-e038-4c94-8573-11b89079196d
sdnc.io/tenant_id: 14ac7fc1-50d4-409a-ad76-4a0c35f429f3
sdnc.io/qos_policy_id: 38b51db9-cc1d-4b07-872e-cf2644bfc057
sdnc.io/security_group_id: 39b70d60-8bfd-4b27-bb4d-4b8f8955a2e6
sdnc.io/epg_id: ac4d830a-7dc4-454c-92f6-c67646fd0dcb
spec:
containers:
- name: postgres
image: postgres
各参数含义如下:
¡ sdnc.io/network_id:控制组件虚拟网络的UUID或OpenStack虚拟网络的UUID,必选。
¡ sdnc.io/tenant_id:控制组件租户的UUID或OpenStack租户的UUID,必选。OpenStack与控制组件的租户UUID格式不同。Kubernetes插件对接OpenStack时,sdnc.io/tenant_id需填充OpenStack侧的租户UUID;Kubernetes插件对接控制组件时,sdnc.io/tenant_id需填充控制组件侧的租户UUID。
¡ sdnc.io/qos_policy_id:控制组件网络策略的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
¡ sdnc.io/security_group_id:控制组件安全策略的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
¡ sdnc.io/epg_id:控制组件服务链EPG的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
(3) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(4) 创建完成后,在控制组件的虚拟端口页面可查看Pod的上线状态。
(1) 在控制组件上创建租户、虚拟链路层网络、子网、安全策略、网络策略等资源。如果在OpenStack 网络Overlay虚拟机内部署集群或在OpenStack Ironic部署集群,需要在OpenStack上创建租户、虚拟链路层网络、子网等。
(2) 在Master节点上创建并修改Pod配置文件,文件名称以postgres-pod.yaml为例。原标签h3c.io/network_id、h3c.io/tenant_id、h3c.io/qos_policy_id和h3c.io/security_group_id仍可使用。
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
sdnc.io/network_id: 9e9af886-e038-4c94-8573-11b89079196d
sdnc.io/tenant_id: 14ac7fc1-50d4-409a-ad76-4a0c35f429f3
sdnc.io/qos_policy_id: 38b51db9-cc1d-4b07-872e-cf2644bfc057
sdnc.io/security_group_id: 39b70d60-8bfd-4b27-bb4d-4b8f8955a2e6
sdnc.io/epg_id: ac4d830a-7dc4-454c-92f6-c67646fd0dcb
spec:
containers:
- name: postgres
image: postgres
各参数含义如下:
¡ sdnc.io/network_id:控制组件虚拟网络的UUID或OpenStack虚拟网络的UUID,必选。
¡ sdnc.io/tenant_id:控制组件租户的UUID或OpenStack租户的UUID,必选。OpenStack与控制组件的租户UUID格式不同。Kubernetes插件对接OpenStack时,sdnc.io/tenant_id需填充OpenStack侧的租户UUID;Kubernetes插件对接控制组件时,sdnc.io/tenant_id需填充控制组件侧的租户UUID。
¡ sdnc.io/qos_policy_id:控制组件网络策略的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
¡ sdnc.io/security_group_id:控制组件安全策略的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
¡ sdnc.io/epg_id:控制组件服务链EPG的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
(3) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(4) 创建完成后,在控制组件的虚拟端口页面可查看Pod的上线状态。
(1) 在控制组件上创建租户、虚拟链路层网络、子网、安全策略、网络策略等资源。如果在OpenStack 网络Overlay虚拟机内部署集群或在OpenStack Ironic部署集群,需要在OpenStack上创建租户、虚拟链路层网络、子网等。
(2) 在集群中创建NetworkConfiguration资源:
apiVersion: "sdnc.io/v1"
kind: NetworkConfiguration
metadata:
name: example
namespace: default
spec:
config: '{
"network": {
"network_id": "bbdf64ec-73c7-4038-b134-b792cacf43cf"
},
"tenant": {
"tenant_id": "115d0dcc-f5a7-407f-b0d1-9da3431df26b"
},
"qos_policy": {
"qos_policy_id": "bbdf64cc- f5c7-407f-b0d1-9da3431df26b"
},
"security_group": {
"security_group_id": "132d0dec-737f-407f-b0d1-9da3431df26b"
}
}'
各参数含义如下:
¡ network_id:控制组件虚拟网络的UUID或OpenStack虚拟网络的UUID,必选。
¡ tenant_id:控制组件租户的UUID或OpenStack租户的UUID,必选。OpenStack与控制组件的租户UUID格式不同。Kubernetes插件对接OpenStack时,tenant_id需填充OpenStack侧的租户UUID;Kubernetes插件对接控制组件时,tenant_id需填充控制组件侧的租户UUID。
¡ qos_policy_id:控制组件网络策略的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
¡ security_group_id:控制组件安全策略的UUID,可选。OpenStack虚拟机暂不支持配置本参数。
(3) 在Master节点上创建并修改Pod配置文件,文件名称以postgres-pod.yaml为例。
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
sdnc.io/network_conf: example
spec:
containers:
- name: postgres
image: postgres
各参数含义如下:
¡ sdnc.io/network_conf :控制组件或OpenStack网络配置的名称。
(4) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(5) 创建完成后,在控制组件的虚拟端口页面可查看Pod的上线状态。
在配置网络参数后(请参见“6.1 配置Pod网络参数”),可为Pod配置固定IP地址或从IP地址池中动态分配IP地址。不支持与crd方式共用。
(1) 在控制组件上创建租户、虚拟链路层网络、子网、安全策略、网络策略等资源。
(2) 在Master节点上创建并修改Pod配置文件,原标签h3c.io/ipv4addr和h3c.io/ipv6addr仍可使用,文件名称以postgres-pod.yaml为例:
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
sdnc.io/ipv4addr: 10.10.0.1
sdnc.io/ipv6addr: 201::1
spec:
containers:
- name: postgres
image: postgres
各参数含义如下:
¡ sdnc.io/ipv4addr:指定Pod的IPv4地址,可选。
¡ sdnc.io/ipv6addr:指定Pod的IPv6地址,可选。
(3) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(4) 创建完成后,在控制组件的虚拟端口页面可查看Pod的上线状态。
(1) 在控制组件上创建租户、虚拟链路层网络、子网、安全策略、网络策略等资源。
(2) 在集群中创建IPv4或IPv6地址池资源:
¡ IPv4:
apiVersion: sdnc.io/v1
kind: IpV4Pool
metadata:
name: v4-ippool
spec:
network_id: 5a25bc62-c8b4-4645-b194-2fa83bf7d91d
ip_ranges:
- start: 10.10.1.3
end: 10.10.1.10
- start: 10.10.2.3
end: 10.10.2.10
¡ IPv6:
apiVersion: sdnc.io/v1
kind: IpV6Pool
metadata:
name: v6-ippool
spec:
network_id: 5a25bc62-c8b4-4645-b194-2fa83bf7d91d
ip_ranges:
- start: 201::2:1
end: 201::2:5
- start: 201::3:1
end: 201::4:1
各参数含义如下:
¡ network_id:控制组件虚拟链路层网络的UUID,必选。
¡ ip_ranges:Pod IP地址池的地址段。
¡ start:地址段的起始IP。
¡ end:地址段的结束IP。
(3) 在Master节点上创建并修改Pod配置文件,文件名称以postgres-pod.yaml为例:
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
sdnc.io/ipv4pool: v4-ippool
sdnc.io/ipv6pool: v6-ippool
spec:
containers:
- name: postgres
image: postgres
各参数含义如下:
¡ sdnc.io/ipv4pool:指定Pod的IPv4地址池。
¡ sdnc.io/ipv6pool:指定Pod的IPv6地址池。
(4) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(5) 创建完成后,在控制组件的虚拟端口页面可查看Pod的上线状态,Pod的IP地址为指定IP地址池中的地址。
· 固定IP不能和IP地址池冲突。
· 固定IP和IP地址池不能和控制组件子网的DHCP地址池冲突。
本节介绍在Kubernetes上通过crd配置参数、创建Pod并上线至控制组件的操作步骤。
如果在控制组件或OpenStack上事先创建了租户、虚拟链路层网络和子网等,创建network crd时,将网络ID、子网ID等填充至对应参数即可。
如果未事先创建虚拟链路层网络和子网,创建network crd时可以不填充网络ID和子网ID。CNI插件将联动控制组件或OpenStack,创建对应的虚拟链路层网络和子网。使用这种方式,可以通过修改或删除network crd来实现对应虚拟链路层网络和子网的修改效果。
(1) 在集群中创建NetworkAttachmentDefinition资源。
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: pod-network
spec:
create_at: openstack
tenant_id: 665cdcaa9b3f4183824bf551c909429c
network_id: cf2be36f-555d-49f7-bb85-a124b068b2bc
physical_network: physnet1
segmentation_id: 305
router_external: false
network_type: vlan
subnets:
- name: pod_sub
subnet_id: 3c6af174-5bcb-45b8-906b-24f23f92adde
gateway_ip:
cidr: 4.0.0.0/24
ip_version: 4
enable_dhcp: true
- name: pod_sub2
subnet_id: d09bc4c8-ba41-4344-9a38-062cd0934727
gateway_ip:
cidr: 212::/16
ip_version: 6
enable_dhcp: true
static_ip: true
release_after: “2h3m6s”
warm: false
各参数含义如下:
¡ create_at:该字段由插件渲染,不填。渲染后的字段值若为kubernetes,表示先填写network crd;若为openstack,表示先在OpenStack创建网络资源,然后将网络资源数据填充到network crd中,再创建network crd;若为sdnc表示先在控制组件创建网络资源,然后将网络资源数据填充到network crd中,再创建network crd。
¡ name:crd资源名称,支持小写字母数字和“-”,名称唯一。插件会对该名称进行校验,校验规则为正则表达式:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*。
¡ tenant_id:控制组件租户的UUID或OpenStack租户的UUID,必选。OpenStack与控制组件的租户UUID格式不同。Kubernetes插件对接OpenStack时,tenant_id需填充OpenStack侧的租户UUID;Kubernetes插件对接控制组件时,tenant_id需填充控制组件侧的租户UUID。
¡ network_id:控制组件虚拟网络的UUID或OpenStack虚拟网络的UUID。当不为空时,crd资源信息应与控制组件或OpenStack一致;当为空时,表示该crd会在控制组件或OpenStack上创建对应的虚拟网络层资源,并将创建的网络ID反向渲染到该字段上。
¡ physical_network:OpenStack裸金属非层次化网络名称,network_type为vlan时必填。
¡ segmentation_id:OpenStack裸金属Segment ID,network_type为vlan时必填。
¡ router_external:OpenStack裸金属非层次化是否外部网络,默认为false。
¡ network_type:网络类型,对接OpenStack裸金属非层次化时取值为vlan;其他场景取值为vxlan或空。默认为vxlan。
¡ subnets:子网信息,包括name、subnet_id、cidr、ip_version、enable_dhcp(需为true)。在network id不为空时,应与控制组件或OpenStack一致。支持配置多个同IP版本的子网。
¡ static_ip:地址保持。当设置为true时,将为statefulset的Pod保持IP,并支持Pod漂移IP保持。当设置为true生效后不允许修改为false。
¡ release_after:地址保持的过期释放时间。格式为:*h*m*s,例如1h,1h30m,1h30m30s。在地址保持的Pod删除后一段时间(即过期释放时间)未重新启动,会释放地址保持的数据。static_ip设置为true时有效,否则无效。
¡ warm:对接OpenStack时,网络是否开启预热,该字段与static_ip互斥。
(2) 在集群中更新NetworkAttachmentDefinition资源。
创建network crd时,由CNI插件联动控制组件或OpenStack创建的网络资源(即network_id参数为空),由于network crd需要反向渲染network_id与subnet_id等字段,所以不建议使用kubectl apply去更新network crd资源,应通过kubectl edit更新最新的network crd资源。
更新规则如下:
¡ 新的network crd资源的子网不填写subnet_id,则认为是新增子网。
¡ 新的network crd子网ID不变,则认为是更新子网。
¡ 新的network crd不存在的旧子网ID,则认为是删除子网。
(3) 在集群中删除NetworkAttachmentDefinition资源。
删除由network crd创建的网络资源,控制组件或OpenStack上的网络子网会同步删除。warm参数为true的网络资源,需先更新为false才能删除。
如果在控制组件或OpenStack上事先创建了QoS规则,在创建qos crd时,将qos id等属性填充至对应参数即可。
如果未事先创建QoS规则,创建qos crd时可以不填充qos id。CNI插件将联动控制组件或OpenStack创建对应的QoS资源。使用这种方式,可以通过修改或删除qos crd来实现对应QoS规则的修改效果。
(1) 在集群中创建QosDefinition crd资源。
apiVersion: "k8s.cni.cncf.io/v1"
kind: QosDefinition
metadata:
name: qos1
spec:
create_at: kubernetes
qos_id: 1f45ace0-8a0e-4e8a-8024-79f9eb6f94ab
rules:
- type: bandwidth_limit
max_kbps: 500
max_burst_kbps: 500
direction: ingress
- type: dscp_marking
dscp_mark: “26” //注:string类型,需要添加双引号
各参数含义如下:
¡ name:qos crd资源名称,支持小写字母数字和“-”,名称唯一。插件会对该名称进行校验,校验规则为正则表达式:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*。
¡ create_at:该字段由插件渲染,不填。渲染后的字段值若为kubernetes,表示先填写qos crd;若为openstack,表示先在OpenStack创建QoS规则,然后将QoS规则数据填充到qos crd中,再创建qos crd;若为sdnc,表示先在控制组件创建QoS规则,然后将QoS规则数据填充到qos crd中,再创建qos crd。
¡ qos_id:控制组件或OpenStack上QoS资源的ID。当不为空时,crd资源信息应与控制组件或OpenStack一致;当为空时,表示该crd会在控制组件或OpenStack上创建对应的QoS资源,并将创建的QoS ID反向渲染到该字段上。
¡ rules:QoS资源规则,支持bandwidth_limit与dscp_marking类型。
(2) 在集群中更新QosDefinition资源。
创建qos crd时,由CNI插件联动控制组件或OpenStack创建的QoS资源(qos_id参数为空),由于qos crd需要反向渲染qos_id等字段,不建议使用kubectl apply去更新qos crd资源,应通过kubectl edit更新最新的qos crd资源。
对接控制组件更新规则:整体更新。
对接OpenStack更新规则(OpenStack中每个QoS规则具有ID):
¡ 新的qos crd资源的规则不填写规则ID,则认为是新增规则。
¡ 新的qos crd规则ID不变,则认为是更新规则。
¡ 新的qos crd不存在的旧规则ID,则认为是删除规则。
(3) 在集群中删除QosDefinition资源。
删除由qos crd创建的QoS资源,控制组件或OpenStack上的QoS会同步删除。
如果在控制组件或OpenStack上事先创建了安全组规则,在创建安全组crd时,将对应securitygroup id和securitygrouprule id等属性填充至对应参数即可。
如果未事先创建安全组,创建安全组crd时可以不填充securitygroup id和securitygrouprule id。CNI插件将联动控制组件或OpenStack创建对应的安全组资源。使用这种方式,可以通过修改或删除安全组crd来实现对应安全组的修改效果。
(1) 在集群中创建SecurityGroupDefinition crd资源。
apiVersion: k8s.cni.cncf.io/v1
kind: SecurityGroupDefinition
metadata:
name: sg-create
spec:
create_at: kubernetes
rules:
- direction: ingress
ethertype: IPv4
id: 18ad1313-0588-4519-86e0-dc47af8f660b
port_range_max: 8080
port_range_min: 8080
protocol: tcp
remote_ip_prefix: 100.0.0.0/16
security_group_id: ff0570ef-eecb-4d7f-a658-4eef43cadc19
tenant_id: e93adb34143c42b8847f009dba9413a7
各参数含义如下:
¡ name:安全组crd资源名称,支持小写字母和“-”,名称唯一。插件会对该名称进行校验,校验规则为正则表达式:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*。
¡ create_at:该字段由插件渲染,不填。渲染后的字段值,若为kubernetes,表示先填写安全组crd;若为openstack,表示先在OpenStack创建安全组规则,然后将安全组规则数据填充到安全组crd中,再创建安全组crd;若为sdnc,表示先在控制组件创建安全组规则,然后将安全组规则数据填充到安全组crd中,再创建安全组crd。
¡ tenant_id:控制组件租户的UUID或OpenStack租户的UUID,必选。OpenStack与控制组件的租户UUID格式不同。Kubernetes插件对接OpenStack时,tenant_id需填充OpenStack侧的租户UUID;Kubernetes插件对接控制组件时,tenant_id需填充控制组件侧的租户UUID。
¡ security_group_id:控制组件或OpenStack上安全组资源的ID。不为空时,crd资源信息应与控制组件或OpenStack一致;当为空时,表示该crd会在控制组件或OpenStack上创建对应的安全组资源,并将创建的security_group_id反向渲染到该字段上。
¡ rules:安全组规则,其中protocol仅支持取值为icmp、tcp与udp。
(2) 在集群中更新SecurityGroupDefinition资源。
创建安全组crd时,由CNI插件联动控制组件或OpenStack创建的安全组资源(security_group_id为空),由于安全组crd需要反向渲染security_group_id等字段,所以不建议使用kubectl apply去更新安全组crd资源,应通过kubectl edit更新最新的安全组crd资源。
对接更新规则:
¡ 新的安全组crd资源的规则不填写规则ID,则认为是新增规则。
¡ 新的安全组crd规则ID不变,则认为是更新规则。仅控制组件支持此操作。若需要在OpenStack更新规则,可以先删除旧规则,再添加新规则。
¡ 新的安全组crd不存在的旧规则ID,则认为是删除规则。
(3) 在集群中删除SecurityGroupDefinition资源。
删除由安全组crd创建的安全组资源,控制组件或OpenStack上的安全组会同步删除。
当前port crd为Pod IP地址的一种声明方式,通过在Pod中引用port crd,以达到为Pod网卡分配指定IP地址的效果,即“6.2 配置Pod的IP地址”中参数sdnc.io/ipv4addr和sdnc.io/ipv6addr的效果。创建port crd前需要创建network_id对应的network crd。
(1) 在控制组件上创建租户、虚拟链路层网络、子网等资源。如果在OpenStack网络Overlay虚拟机内部署集群或在OpenStack Ironic部署集群,需要在OpenStack上创建租户、虚拟链路层网络、子网等。
(2) 在集群中创建Port crd资源。
apiVersion: "k8s.cni.cncf.io/v1"
kind: PortDefinition
metadata:
name: port1
spec:
network_id: 9d24145a-7934-4be4-b59e-48bb271094d9
fixed_ips:
- subnet_name: v4-100
ip_address: 100.0.0.0.2
- subnet_name: v6-231
ip_address: 231::6
各参数含义如下:
¡ network_id:控制组件虚拟网络的UUID或OpenStack虚拟网络的UUID。
¡ subnet_name:子网名称。
若使用地址保持释放功能,需确保K8s集群中所有节点的系统时间一致。
(1) 在Master节点上创建并修改Pod配置文件,文件名称以postgres-pod.yaml为例。
$ vi postgres-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: postgres
annotations:
k8s.v1.cni.cncf.io/networks: pod-network1/pod_sub1/pod_sub2,pod-network2/pod_sub1/pod_sub2,pod-network3/pod_sub1/pod_sub2
k8s.v1.cni.cncf.io/static_ip: "true"
k8s.v1.cni.cncf.io/static_ip_release_after: "3h3m4s"
k8s.v1.cni.cncf.io/qoses: qos-create1,,qos-create2
k8s.v1.cni.cncf.io/security-groups: sg-create1/sg-create2,,sg-create3
k8s.v1.cni.cncf.io/ports: port-create1,,port-create3
spec:
containers:
- name: postgres
image: postgres
各参数含义如下:
¡ k8s.v1.cni.cncf.io/networks:network_crd的名称和子网,用“/”拼接,允许只配置网络。同网络下配置多个子网时,子网之间用“/”拼接。示例中Pod会生成三张网卡,并使用对应网络的子网。若希望创建Pod时使用预热的网卡,则该参数需要配置为预热网络名称(即warm参数为true的网络名称),不支持配置子网。且该参数下的所有网络均需要为预热网络,否则无法使用预热的网卡。
¡ k8s.v1.cni.cncf.io/ static_ip:Pod地址保持,在第一次创建时,Pod地址随机分配,但在更新时,Pod地址会保持。该配置的优先级高于k8s.v1.cni.cncf.io/networks使用的network_crd地址保持配置。
¡ k8s.v1.cni.cncf.io/static_ip_release_after:地址保持的过期释放时间,格式为:*h*m*s,例如1h,1h30m,1h30m30s。该配置生效需要k8s.v1.cni.cncf.io/ static_ip配置为true。
¡ k8s.v1.cni.cncf.io/ qoses:qos crd名称,网卡间逗号隔开。若为空,则表示不使用QoS,QoS数量需与网卡数量保持一致。示例中Pod的第一张网卡使用qos-create1,第二张网卡不使用QoS,第三张网卡使用qos-create3。
¡ k8s.v1.cni.cncf.io/ security-groups:安全组crd名称,网卡间逗号隔开,每个网卡可使用多个安全组,用”/”隔开。若为空,则表示不使用安全组,安全组逗号隔开数量需与网卡数量保持一致。示例中Pod的第一张网卡使用sg-create1与sg-create2,第二张网卡不使用安全组,第三张网卡使用sg-create3。
¡ k8s.v1.cni.cncf.io/ ports:port crd的名称,网卡间逗号隔开,port crd数量与网卡数量保持一致。示例中Pod的第一张网卡使用port-create1,第二张网卡不使用,第三张网卡使用port-create3。
(2) 使用配置文件创建Pod。
$ kubectl create -f postgres-pod.yaml
(3) 创建完成后,在控制组件的虚拟端口页面可查看Pod的多个vPort上线状态。
· k8s.v1.cni.cncf.io/ static_ip表示Pod粒度的地址保持配置,具有比network_crd更高的优先级,即当network_crd也存在地址保持配置时,k8s.v1.cni.cncf.io/ static_ip生效。
· k8s.v1.cni.cncf.io/static_ip_release_after表示Pod粒度的地址保持过期释放时间,需要k8s.v1.cni.cncf.io/ static_ip配置为true才可生效,具有比network_crd更高的优先级。即当network_crd也存在地址保持过期释放时间时,k8s.v1.cni.cncf.io/static_ip_release_after生效;不使用该配置时,如果k8s.v1.cni.cncf.io/ static_ip为true,则地址永久保持,为false则不保持。
· 当不使用k8s.v1.cni.cncf.io/ static_ip和k8s.v1.cni.cncf.io/static_ip_release_after配置时,如果多个network_crd中存在地址保持为true,则所有network_crd分配的地址都会保持,且所有network_crd中最长的过期释放时间生效。若所有释放时间都为缺省值,则地址永久保持。
网络策略(NetworkPolicy)是一种关于Pod间及与其他网络端点间所允许的通信规则的规范。NetworkPolicy资源使用标签选择Pod,并定义选定Pod所允许的通信规则。CNI插件支持通过Networkpolicy实现对Pod流量的管控。
(1) 在集群中创建NetworkPolicy资源。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: demo-np
namespace: default
spec:
podSelector:
matchLabels:
hello: world
ingress:
- from:
- ipBlock:
cidr: 5.0.0.0/24
egress:
- to:
- ipBlock:
cidr: 5.0.0.0/24
ports:
- port: 8080
protocol: TCP
policyTypes:
- Egress
- Ingress
各参数含义如下:
¡ name:np资源名称。
¡ namespace:所属的namespace。
¡ podSelector:标记的Pod范围,可通过labels定位Pod。
¡ ingress:入方向流量放行。
¡ egress:出方向流量放行。
¡ policyTypes:策略类型,入方向,出方向。
(2) 创建完np后,np命中的Pod将会受到policy的流量限制。
NetworkPolicy只对容器网络后端Pod生效,对主机网络后端Pod不生效。
图7-1 参数配置关系
· enable_flows_pre_distribution:是否开启预置流表。开启后可显著提升ClusterIP和NodePort的并发访问性能,生产环境需要开启。
· node_port_interface_type:业务网口的类型,可配置子接口模式(host_ip_link_vlan)或者cniOVSNode模式(openvswitch_internal)。
¡ 当配置子接口模式时,需要占用节点VLAN池中的一个VLAN,可以提升NodePort跨节点转发的并发性能。
¡ 当配置为cniOVSNode模式时,可通过使能enable_nodeport_normal_forward和nodeport_local_source_cidr提升NodePort跨节点转发和本节点转发的并发性能。
· enable_nodeport_normal_forward:是否开启nodeport normal转发。开启后,可提升nodpeort跨节点转发并发性能。
· nodeport_local_source_cidr:是否开启nodeport源网段预置流表。开启后,可提升nodpeort本节点转发并发性能。
在K8s中,NodePort和LoadBalancer类型的service可配置externalTrafficPolicy属性,表示此Service是否希望将外部流量路由到节点本地后端或集群范围内的所有后端。externalTrafficPolicy属性取值可配置为Cluster(默认)和Local。Cluster表示可以跨节点转发,Local表示只能在本节点的后端转发。
是否开启大云VLAN类型网络映射预设。在CloudOS虚机部署的K8s集群,如果存在Pod大量上线的业务需求,则可以使用VLAN网络部署Pod,并开启cloud_network_vlanmap_preset,配合大云和CAS实现转发规则预下发,帮助Pod快速上线。
在OpenStack虚机部署的K8s集群,如果存在Pod批量快速上线的业务需求,且Pod需要使用VXLAN网络以突破4k VLAN限制,则可以使用容器网卡预热功能。具体参数配置推荐如下。
· warm_nic_minimum:对接OpenStack时,预热网络在每个节点预热的起始网卡数,根据使用预热网络的Pod数进行评估。
· warm_nic_target:对接OpenStack时,预热网络每次扩缩容的网卡数,建议取值为10。
· warm_nic_threshold:对接OpenStack时,预热网络判断是否扩缩容的阈值,该值需小于warm_nic_minimum与warm_nic_target,建议取值为3。
· warm_vlan_ranges:对接OpenStack虚机时,预热网络所使用的VLAN范围。
· warm_cool_down_time:对接OpenStack虚拟机时,预热网卡可使用的冷却时间,根据实际环境Pod上线性能取值。
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!
