Skip to content

Commit

Permalink
Upgrade to cce-network-v1
Browse files Browse the repository at this point in the history
  • Loading branch information
gola committed Feb 7, 2024
1 parent f969cc6 commit eb63098
Show file tree
Hide file tree
Showing 1,219 changed files with 71,945 additions and 124,943 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,4 @@ cover.html
c.out
__debug_bin
build.local
output
GO_VERSION
output
125 changes: 93 additions & 32 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,73 +3,134 @@ HOMEDIR := $(shell pwd)
OUTDIR := $(HOMEDIR)/output

# init command params
export GO := $(GO_1_20_BIN)/go
GO := $(GO_1_18_BIN)/go
ifeq ($(GO), /go)
GO = go
endif
export GOROOT := $(GO_1_20_HOME)
GOROOT := $(GO_1_18_HOME)
GOPATH := $(shell $(GO) env GOPATH)
GOPKGS := $$($(GO) list ./...| grep "pkg" |grep -v "vendor" | grep -v "cmd" |grep -v "test" | grep -v 'api' |grep -v "generated" | grep -v 'pkg/bce' | grep -v config | grep -v metric | grep -v rpc | grep -v version | grep -v wrapper | grep -v util)
GOGCFLAGS := -gcflags=all="-trimpath=$(GOPATH)" -asmflags=all="-trimpath=$(GOPATH)"
GOLDFLAGS := -ldflags '-s -w'
GOMOD := $(GO) mod
GOARCH := $(shell $(GO) env GOARCH)
GOBUILD = CGO_ENABLED=0 GOOS=linux GOARCH=$(GOARCH) $(GO) build
GOTEST := $(GO) test -race -timeout 30s -gcflags="-N -l"
GOPKGS := $$($(GO) list ./...| grep -vE "vendor")

GOTEST := $(GO) test
GOPKGS := $$($(GO) list ./...| grep "pkg" |grep -v "vendor" | grep -v "cmd" |grep -v "test" | grep -v 'api' |grep -v "generated" | grep -v 'pkg/bce' | grep -v config | grep -v metric | grep -v rpc | grep -v version | grep -v wrapper | grep -v util | grep -v testing)
GOGCFLAGS := -gcflags=all="-trimpath=$(GOPATH)" -asmflags=all="-trimpath=$(GOPATH)"
GOLDFLAGS := -ldflags '-s -w'
GO_PACKAGE := github.com/baidubce/baiducloud-cce-cni-driver
# test cover files
COVPROF := $(HOMEDIR)/covprof.out # coverage profile
COVFUNC := $(HOMEDIR)/covfunc.txt # coverage profile information for each function
COVHTML := $(HOMEDIR)/covhtml.html # HTML representation of coverage profile

SUBDIRS = cce-network-v2 eip-operator
# versions
VERSION := v1.9.6
FELIX_VERSION := v3.5.8
K8S_VERSION := 1.18.9

# build info
GIT_COMMIT := $(shell git rev-parse HEAD)
GIT_SUMMARY := $(shell git describe --tags --dirty --always)
BUILD_DATE := $(shell date -u +'%Y-%m-%dT%H:%M:%SZ')


EXTRALDFLAGS := -X $(GO_PACKAGE)/pkg/version.GitCommit=$(GIT_COMMIT)
EXTRALDFLAGS += -X $(GO_PACKAGE)/pkg/version.GitSummary=$(GIT_SUMMARY)
EXTRALDFLAGS += -X $(GO_PACKAGE)/pkg/version.BuildDate=$(BUILD_DATE)
EXTRALDFLAGS += -X $(GO_PACKAGE)/pkg/version.Version=$(VERSION)

# pro or dev
PROFILES := dev
IMAGE_TAG := registry.baidubce.com/cce-plugin-$(PROFILES)/cce-cni
PUSH_CNI_IMAGE_FLAGS = --push

# make, make all
all: prepare
all: prepare compile

fmt: ## Run go fmt against code.
$(GO) fmt $(shell $(GO) list ./... | grep -v /vendor/)

vet: ## Run go vet against code.
$(GO) vet $(shell $(GO) list ./... | grep -v /vendor/)

# set proxy env
set-env:
$(GO) env -w GO111MODULE=on
$(GO) env -w GONOPROXY=\*.baidu.com\*
$(GO) env -w GONOPROXY=\*\*.baidu.com\*\*
$(GO) env -w GOPROXY=https://goproxy.baidu-int.com
$(GO) env -w GONOSUMDB=\*
$(GO) env -w CC=/opt/compiler/gcc-8.2/bin/gcc
$(GO) env -w CXX=/opt/compiler/gcc-8.2/bin/g++
$(GO) work sync

#make prepare, download dependencies
prepare: set-env
mkdir -p $(OUTDIR)
go env
prepare: gomod

gomod: set-env
$(GOMOD) download -x || $(GOMOD) download -x
$(GOMOD) download

#make compile
compile: build
outdir:
mkdir -p $(OUTDIR)/cni-bin
# Compile all cni plug-ins
cni_target := eni-ipam ipvlan macvlan bandwidth ptp sysctl unnumbered-ptp crossvpc-eni rdma eri roce
$(cni_target): fmt outdir
@echo "===> Building cni $@ <==="
$(GOBUILD) $(GOLDFLAGS) $(GOGCFLAGS) -o $(HOMEDIR)/$@ $(HOMEDIR)/cni/$@
strip $(HOMEDIR)/$@
mv $(HOMEDIR)/$@ $(OUTDIR)/cni-bin/

build: prepare
make -C cce-network-v2 build
mv cce-network-v2/output $(OUTDIR)/cce-network-v2
# Compile all container network programs
exec_target := cce-ipam cni-node-agent ip-masq-agent
$(exec_target): fmt outdir
@echo "===> Building cni $@ <==="
$(GOBUILD) $(GOLDFLAGS) $(GOGCFLAGS) -ldflags '$(EXTRALDFLAGS)' -o $(HOMEDIR)/$@ $(HOMEDIR)/cmd/$@
strip $(HOMEDIR)/$@
mv $(HOMEDIR)/$@ $(OUTDIR)

#make compile
compile: $(cni_target) $(exec_target)
build: compile

# make test, test your code
test: prepare test-case
test-case:
$(GOTEST) -v -cover $(GOPKGS)
$(GOTEST) -v -cover -parallel 16 $(GOPKGS)

debian-iptables-image:
@echo "===> Building debian iptables base image <==="
docker build -t cce-cni-debian-iptables:v1.0.0 -f build/images/debian-iptables/Dockerfile build/images/debian-iptables

codegen-image:
@echo "===> Building codegen image <==="
docker build -t cce-cni-codegen:kubernetes-$(K8S_VERSION) -f build/images/codegen/Dockerfile build/images/codegen

cni-amd64-image: GOARCH = amd64
cni-amd64-image: compile
docker buildx build --platform linux/amd64 -t $(IMAGE_TAG):$(VERSION) -f build/images/cce-cni/Dockerfile . $(PUSH_CNI_IMAGE_FLAGS)

cni-arm64-image: GOARCH = arm64
cni-arm64-image: compile
# docker buildx create --name arm
docker buildx use arm && docker buildx build --platform linux/arm64 -t $(IMAGE_TAG)-arm64:$(VERSION) -f build/images/cce-cni/arm64.Dockerfile . $(PUSH_CNI_IMAGE_FLAGS)

image: cni-amd64-image

felix-image:
@echo "===> Building cce felix image <==="
docker build -t registry.baidubce.com/cce-plugin-pro/cce-calico-felix:$(FELIX_VERSION) -f build/images/cce-felix/Dockerfile pkg/policy

push-felix-image:felix-image
@echo "===> Pushing cce felix image <==="
docker push registry.baidubce.com/cce-plugin-pro/cce-calico-felix:$(FELIX_VERSION)

codegen:codegen-image
@echo "===> Updating generated code <==="
$(HOMEDIR)/hack/update-codegen.sh

# make package
package: package-bin
package-bin:
mkdir -p $(OUTDIR)
mv cce-network-plugin $(OUTDIR)/
charts:
@helm template build/yamls/cce-cni-driver -f $(VALUES)

# make clean
clean:
$(GO) clean
rm -rf $(OUTDIR)
rm -rf $(HOMEDIR)/cce-network-plugin
rm -rf $(GOPATH)/pkg/darwin_amd64

# avoid filename conflict and speed up build
.PHONY: all prepare compile test package clean build
# avoid filename conflict and speed up build
.PHONY: all prepare compile test package clean build
153 changes: 153 additions & 0 deletions README-zh_CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
# 百度云 CNI 插件

[English](./README.md) | 简体中文

## 插件介绍

百度云 CNI 插件实现了在 Kubernetes 中对百度云弹性网卡、辅助 IP 的管理与使用。当前 CNI实现基于 CNI spec 0.4.0版本,支持 K8S 1.16 及以上。

## 快速开始

本小节介绍如何在一个百度云 [CCE](https://cloud.baidu.com/product/cce.html) 集群中快速部署 CNI 插件。

### 前置条件

需要具备一个可用的百度云 CCE 集群。见[创建一个 CCE 集群](https://cloud.baidu.com/doc/CCE/s/zjxpoqohb).

### 特性

从单节点内容器连通性的角度来看, 百度云 CNI 插件支持两种模式:
- veth (适合所有版本的操作系统镜像)
- ipvlan (需要内核版本 >= 4.9, 例如 ubuntu16/18 and centos8+)

从跨节点容器连通性的角度来看, 百度云 CNI 插件支持三种模式:
- VPC 路由模式
- 弹性网卡辅助 IP 模式 (仅支持 BCC)
- BBC 主网卡辅助 IP 模式

### 组件

总共有三个组件:

- CNI 插件, 连接容器和宿主机的网络栈
- Node Agent, 在每个节点运行的守护进程,负责:
- 维护 `/etc/cni/net.d/` 目录下的 CNI 配置文件
- 安装 CNI 插件二进制到 `/opt/cni/bin/` 目录
- 配置弹性网卡
- 维护 VPC 路由
- ENI IPAM, 中心化的 IP 分配组件,支持:
- 创建和绑定弹性网卡
- 为 Pod 分配辅助 IP

<img src="./docs/images/cni-components.png" />

### 部署

`build/yamls/cce-cni-driver/values.yaml` 填入正确的信息,然后执行

```
make charts VALUES=build/yamls/cce-cni-driver/values.yaml | kubectl apply -f -
```

假设我们有个在 `bj` 地域的 CCE 集群,集群 ID 是 `cce-xxxxx`,集群所属 VPC 是 `vpc-yyyyy`


样例的 `values.yaml` 如下:

#### VPC 路由模式
```yaml
CNIMode: vpc-route-auto-detect
Region: bj
ClusterID: cce-xxxxx
VPCID: vpc-yyyyy
ContainerNetworkCIDRIPv4: # cluster container cidr
CCEGatewayEndpoint: cce-gateway.bj.baidubce.com
BCCEndpoint: bcc.bj.baidubce.com
BBCEndpoint: bbc.bj.baidubce.com
ServiceCIDR: # cluster service cidr
CCECNIImage: registry.baidubce.com/cce-plugin-pro/cce-cni:v1.3.4

# Route Controller
EnableVPCRoute: true
EnableStaticRoute: false
```
#### 弹性网卡辅助 IP 模式
```yaml
CNIMode: vpc-secondary-ip-auto-detect
Region: bj
ClusterID: cce-xxxxx
VPCID: vpc-yyyyy
ENISubnetList:
- sbn-a
- sbn-b
SecurityGroupList:
- g-bwswsr8fbjb4
CCEGatewayEndpoint: cce-gateway.bj.baidubce.com
BCCEndpoint: bcc.bj.baidubce.com
BBCEndpoint: bbc.bj.baidubce.com
ServiceCIDR: # cluster service cidr
CCECNIImage: registry.baidubce.com/cce-plugin-pro/cce-cni:v1.3.4
```
#### BBC 主网卡辅助 IP 模式
```yaml
CNIMode: bbc-vpc-secondary-ip-auto-detect
Region: bj
ClusterID: cce-xxxxx
VPCID: vpc-yyyyy
CCEGatewayEndpoint: cce-gateway.bj.baidubce.com
BCCEndpoint: bcc.bj.baidubce.com
BBCEndpoint: bbc.bj.baidubce.com
ServiceCIDR: # cluster service cidr
CCECNIImage: registry.baidubce.com/cce-plugin-pro/cce-cni:v1.3.4
```
更多的信息请查阅 [values.yaml](build/yamls/cce-cni-driver/values.yaml)。
## 测试
### 单元测试
```
make test
```

## 如何贡献

请先阅读[CNI Spec](https://github.com/containernetworking/cni/blob/master/SPEC.md) ,了解 CNI 的基本原理和开发指导。

### 环境

* Golang 1.13.+
* Docker 17.05+ 用于镜像发布

### 依赖管理

Go module

### 镜像构建

```
export GO111MODULE=on
make build
make cni-image
```

### Issues

接受的 Issues 包括:

* 需求与建议。
* Bug。

### 维护者

* 主要维护者:: [email protected], [email protected]

### 讨论

* Issue 列表
* 如流群:1586317
Loading

0 comments on commit eb63098

Please sign in to comment.