系统版本
[root@reg sample-controller]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
golang版本
[root@reg ~]# go version
go version go1.10.1 linux/amd64
GOPATH
[root@reg sample-controller]# go env | grep GOPATH
GOPATH="/root/qinzhao/"
在GOPATH/src/k8s.io/目录下clone项目代码
go get k8s.io/apimachinery //下载依赖
[root@reg k8s.io]# git clone https://github.com/kubernetes/sample-controller.git //clone代码
Cloning into 'sample-controller'...
remote: Enumerating objects: 56, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (50/50), done.
Receiving objects: 100% (15278/15278), 8.23 MiB | 240.00 KiB/s, done.
remote: Total 15278 (delta 10), reused 36 (delta 6), pack-reused 15222
Resolving deltas: 100% (10052/10052), done.
[root@reg k8s.io]# ls -l
total 12
drwxr-xr-x 8 root root 4096 Dec 24 13:38 apimachinery
drwxr-xr-x 6 root root 4096 Oct 28 2017 kube-openapi
drwxr-xr-x 10 root root 4096 Dec 24 13:42 sample-controller
[root@reg k8s.io]# cd sample-controller/
[root@reg sample-controller]# ls -l
total 92
drwxr-xr-x 3 root root 4096 Dec 24 13:42 artifacts
-rw-r--r-- 1 root root 148 Dec 24 13:42 code-of-conduct.md
-rw-r--r-- 1 root root 740 Dec 24 13:42 CONTRIBUTING.md
-rw-r--r-- 1 root root 16100 Dec 24 13:42 controller.go
-rw-r--r-- 1 root root 9349 Dec 24 13:42 controller_test.go
drwxr-xr-x 3 root root 4096 Dec 24 13:42 docs
drwxr-xr-x 2 root root 4096 Dec 24 13:42 Godeps
drwxr-xr-x 2 root root 4096 Dec 24 13:42 hack
-rw-r--r-- 1 root root 11358 Dec 24 13:42 LICENSE
-rw-r--r-- 1 root root 2735 Dec 24 13:42 main.go
-rw-r--r-- 1 root root 108 Dec 24 13:42 OWNERS
drwxr-xr-x 5 root root 4096 Dec 24 13:42 pkg
-rw-r--r-- 1 root root 5803 Dec 24 13:42 README.md
-rw-r--r-- 1 root root 621 Dec 24 13:42 SECURITY_CONTACTS
drwxr-xr-x 7 root root 4096 Dec 24 13:42 vendor
[root@reg sample-controller]# pwd
/root/qinzhao/src/k8s.io/sample-controller
生成client-go的代码
[root@reg sample-controller]# pwd
/root/qinzhao/src/k8s.io/sample-controller
[root@reg sample-controller]# ./hack/update-codegen.sh
Generating deepcopy funcs
Generating clientset for samplecontroller:v1alpha1 at k8s.io/sample-controller/pkg/client/clientset
Generating listers for samplecontroller:v1alpha1 at k8s.io/sample-controller/pkg/client/listers
Generating informers for samplecontroller:v1alpha1 at k8s.io/sample-controller/pkg/client/informers
编译sample-controller
[root@reg sample-controller]# go build -v -o samplecontroller
k8s.io/sample-controller/vendor/k8s.io/apimachinery/pkg/selection
k8s.io/sample-controller/vendor/k8s.io/client-go/util/integer
k8s.io/sample-controller/vendor/k8s.io/client-go/util/buffer
k8s.io/sample-controller/vendor/github.com/hashicorp/golang-lru/simplelru
k8s.io/sample-controller/vendor/github.com/golang/groupcache/lru
k8s.io/sample-controller/vendor/github.com/gogo/protobuf/sortkeys
k8s.io/sample-controller/vendor/github.com/gogo/protobuf/proto
k8s.io/sample-controller/vendor/gopkg.in/inf.v0
k8s.io/sample-controller/vendor/github.com/google/gofuzz
k8s.io/sample-controller/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect
k8s.io/sample-controller/vendor/k8s.io/apimachinery/pkg/fields
k8s.io/sample-controller/vendor/k8s.io/apimachinery/pkg/util/sets
k8s.io/sample-controller/vendor/k8s.io/apimachinery/pkg/conversion
k8s.io/sample-controller/vendor/k8s.io/apimachinery/pkg/util/errors
...
编译完成之后,会生成名为samplecontroller的二进制文件
-rwxr-xr-x 1 root root 38424399 Dec 24 14:54 samplecontroller
创建crd
➜ sample-controller git:(master) ✗ kubectl create -f artifacts/examples/crd.yaml
customresourcedefinition.apiextensions.k8s.io/foos.samplecontroller.k8s.io created
查看CRD
➜ kubectl get crd
NAME CREATED AT
foos.samplecontroller.k8s.io 2018-12-24T06:18:42Z
部署CRD
kubectl create -f artifacts/examples/example-foo.yaml
~ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
example-foo 1 1 1 1 43m
~ kubectl get pods | grep example-foo
example-foo-6cbc69bf5d-mf8lf 1/1 Running 0 47m
搞定