一、kube-ovn安装
注意:
CentOS 7.5/7.6/7.7, 内核版本需要大于 3.10.0-898
Ubuntu 16.04,需要升级内核至 4.13 以上或者自行编译 ovs 2.12.0 内核模块
参考 https://www.bookstack.cn/read/Kube-OVN-1.2-zh/b2104afdf87eeb6e.md
方式1:脚本部署:
wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.10/dist/images/install.sh
查看POD Service cidr
kubectl cluster-info dump|grep -m 1 cluster-cidr
kubectl cluster-info dump|grep -m 1 service-cluster-ip-range
修改配置参数
REGISTRY="kubeovn" # 镜像仓库地址
VERSION="v1.10.7" # 镜像版本/Tag
POD_CIDR="10.16.0.0/16" # 默认子网 CIDR 不要和 SVC/NODE/JOIN CIDR 重叠
SVC_CIDR="10.96.0.0/12" # 需要和 apiserver 的 service-cluster-ip-range 保持一致
JOIN_CIDR="100.64.0.0/16" # Pod 和主机通信网络 CIDR,不要和 SVC/NODE/POD CIDR 重叠
LABEL="node-role.kubernetes.io/master" # 部署 OVN DB 节点的标签
IFACE="" # 容器网络所使用的的宿主机网卡名,如果为空则使用 Kubernetes 中的 Node IP 所在网卡
TUNNEL_TYPE="geneve" # 隧道封装协议,可选 geneve, vxlan 或 stt,stt 需要单独编译 ovs 内核模块
chmod o+x install.sh
bash install.sh
方式2 yaml部署:
node 节点打标签
kubectl label no -lbeta.kubernetes.io/os=linux kubernetes.io/os=linux --overwrite
kubectl label node <Node on which to deploy OVN DB (部署节点IP)> kube-ovn/role=master --overwrite
安装 kube-ovn CRD,包括 ips subnet vlans provider-networks vpcs vpc-nat-gateways
kubectl apply -f https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/yamls/crd.yaml
下载 ovn.yaml 修改地址,包括组件 ovn-central ovs-ovn
curl -O https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/yamls/ovn.yaml
sed -i 's/\$addresses/<Node IP>/g' ovn.yml
kubectl apply -f ovn.yaml
安装 kube-ovn controller以及 cni 插件,包括组件 kube-ovn-controller kube-ovn-cni kube-ovn-pinger kube-ovn-monitor
kubectl apply -f https://raw.githubusercontent.com/alauda/kube-ovn/release-1.7/yamls/kube-ovn.yaml
查看部署状态
kubectl get pods -n kube-system | grep ovn
确定都runnin后开始下一阶段
二、KubeVirt虚拟机使用物理机网段
创建ProviderNetwork
指定物理服务器上访问物理网络的网卡
apiVersion: kubeovn.io/v1
kind: ProviderNetwork
metadata:
name: office
spec:
defaultInterface: eno1 # 这里填写物理机IP对应网卡
创建VLAN
建在指定服务网络上创建一个VLAN,这里VLAN ID为0表示不属于任何VLAN。
apiVersion: kubeovn.io/v1
kind: Vlan
metadata:
name: defaultvlan # vlan名称
spec:
id: 0
provider: office # 与上面的ProviderNetwork名称对应
创建子网
在defaultvlan上,创建一个子网,这个子网作用的namespace为mail263,指定子网分配的物理网络地址段,物理网络网关地址。
apiVersion: kubeovn.io/v1
kind: Subnet
metadata:
name: mail263
spec:
protocol: IPv4
cidrBlock: 172.16.3.0/24 # cidrBlock: 子网 CIDR 范围,这里填写物理机网段的CIDR即可
gateway: 172.16.3.2 # 底层物理网关地址
excludeIps: # 分配的IP不包含的IP地址
- 172.16.3.1..172.16.3.200
vlan: defaultvlan
# natOutgoing: false
#private: false
namespaces: # 绑定该子网的 Namespace 列表,绑定后 Namespace 下的 Pod 将会从当前子网分配地址。
- mail263
查看kube-ovn信息
kubectl get vlan -o wide
kubectl get subnet
kubectl ko nbctl show
ifconfig #路由的网卡从eth0变成的br-office
创建虚拟机
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:
name: myvmi
spec:
domain:
cpu:
cores: 2
resources:
requests:
memory: 2G
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
volumes:
- name: containerdisk
containerDisk:
image: centos:1805
- name: cloudinitdisk
cloudInitNoCloud:
networkData: |
network:
version: 1
config:
- type: physical
name: eth0
subnets:
- type: dhcp
kubectl apply -f vm.yaml
kubectl get po -n vlan -o wide #POD的IP与物理机IP处于同一网段