使用client-go自定义开发Kubernetes
生活随笔
收集整理的這篇文章主要介紹了
使用client-go自定义开发Kubernetes
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考鏈接:使用client-go自定義開發Kubernetes
1.本地運行 apiserver demo
[root@wangjq demo]# apiserver-boot run local 2019/09/26 09:18:35 regenerating generated code. To disable regeneration, run with --generate=false. /var/wangjq/golang/bin/bin/apiregister-gen --input-dirs demo/pkg/apis/... --input-dirs demo/pkg/controller/... /var/wangjq/golang/bin/bin/conversion-gen --input-dirs demo/pkg/apis/demo/v1 --input-dirs demo/pkg/apis/demo -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt -O zz_generated.conversion --extra-peer-dirs k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/conversion,k8s.io/apimachinery/pkg/runtime /var/wangjq/golang/bin/bin/deepcopy-gen --input-dirs demo/pkg/apis/demo/v1 --input-dirs demo/pkg/apis/demo -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt -O zz_generated.deepcopy /var/wangjq/golang/bin/bin/openapi-gen --input-dirs demo/pkg/apis/demo/v1 --input-dirs demo/pkg/apis/demo -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt -i k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/api/resource,k8s.io/apimachinery/pkg/version,k8s.io/apimachinery/pkg/runtime,k8s.io/apimachinery/pkg/util/intstr,k8s.io/api/admission/v1beta1,k8s.io/api/admissionregistration/v1alpha1,k8s.io/api/admissionregistration/v1beta1,k8s.io/api/apps/v1,k8s.io/api/apps/v1beta1,k8s.io/api/apps/v1beta2,k8s.io/api/authentication/v1,k8s.io/api/authentication/v1beta1,k8s.io/api/authorization/v1,k8s.io/api/authorization/v1beta1,k8s.io/api/autoscaling/v1,k8s.io/api/autoscaling/v2beta1,k8s.io/api/batch/v1,k8s.io/api/batch/v1beta1,k8s.io/api/batch/v2alpha1,k8s.io/api/certificates/v1beta1,k8s.io/api/core/v1,k8s.io/api/events/v1beta1,k8s.io/api/extensions/v1beta1,k8s.io/api/imagepolicy/v1alpha1,k8s.io/api/networking/v1,k8s.io/api/policy/v1beta1,k8s.io/api/rbac/v1,k8s.io/api/rbac/v1alpha1,k8s.io/api/rbac/v1beta1,k8s.io/api/scheduling/v1alpha1,k8s.io/api/settings/v1alpha1,k8s.io/api/storage/v1,k8s.io/api/storage/v1alpha1,k8s.io/api/storage/v1beta1,k8s.io/api/core/v1 --output-package demo/pkg/openapi /var/wangjq/golang/bin/bin/defaulter-gen --input-dirs demo/pkg/apis/demo/v1 --input-dirs demo/pkg/apis/demo -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt -O zz_generated.defaults --extra-peer-dirs= k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/conversion,k8s.io/apimachinery/pkg/runtime /var/wangjq/golang/bin/bin/client-gen -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt --input-base demo/pkg/apis --input demo/v1 --clientset-path demo/pkg/client/clientset_generated --clientset-name clientset /var/wangjq/golang/bin/bin/client-gen -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt --input-base demo/pkg/apis --input demo --clientset-path demo/pkg/client/clientset_generated --clientset-name internalclientset /var/wangjq/golang/bin/bin/lister-gen --input-dirs demo/pkg/apis/demo/v1 --input-dirs demo/pkg/apis/demo -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt --output-package demo/pkg/client/listers_generated /var/wangjq/golang/bin/bin/informer-gen --input-dirs demo/pkg/apis/demo/v1 --input-dirs demo/pkg/apis/demo -o /var/wangjq/golang/src --go-header-file boilerplate.go.txt --output-package demo/pkg/client/informers_generated --listers-package demo/pkg/client/listers_generated --versioned-clientset-package demo/pkg/client/clientset_generated/clientset --internal-clientset-package demo/pkg/client/clientset_generated/internalclientset 2019/09/26 09:19:04 CGO_ENABLED=0 go build -o bin/apiserver cmd/apiserver/main.go go build -o bin/controller-manager cmd/controller-manager/main.go etcd bin/apiserver --etcd-servers=http://localhost:2379 --secure-port=9443 --delegated-auth=false W0926 09:19:16.495764 2406 authorization.go:34] Authorization is disabled W0926 09:19:16.495828 2406 authentication.go:56] Authentication is disabled I0926 09:19:16.504351 2406 logs.go:41] Defaulting fields for Bird bird-example I0926 09:19:16.540151 2406 serve.go:89] Serving securely on [::]:9443 I0926 09:19:17.502752 2406 logs.go:41] Defaulting fields for Bird bird-example to test the server run `kubectl --kubeconfig kubeconfig api-versions` bin/controller-manager --kubeconfig=kubeconfig 2019-09-26 09:19:18.036499 I | Running reconcile Bird for bird-example2.驗證apiserver是否運行正常
[root@wangjq demo]# kubectl --kubeconfig kubeconfig api-versions demo.qianxin.com/v13.client-go源代碼(創建,刪除,更新,獲取)
package mainimport (birdApiv1 "demo/pkg/apis/demo/v1"clientset "demo/pkg/client/clientset_generated/clientset""encoding/json""fmt"metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"schema "k8s.io/apimachinery/pkg/runtime/schema"restclient "k8s.io/client-go/rest" )var url = "127.0.0.1:9443" var newName string = "client-go-demo"type ResourceHandler struct {client *DemoClient }type DemoClient struct {Client *clientset.Clientset }func newResourceHandler() *ResourceHandler {return &ResourceHandler{client: NewDemoClient()} }func NewDemoClient() *DemoClient {c := &DemoClient{}c.Client = clientset.NewForConfigOrDie(&restclient.Config{Host: url,TLSClientConfig: restclient.TLSClientConfig{Insecure: true,},APIPath: "/apis/demo.qianxin.com",ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "demo",Version: "v1",}}})fmt.Println(c.Client)return c }func (c *ResourceHandler) CreateBird() {namespace := &birdApiv1.Bird{ObjectMeta: metav1.ObjectMeta{Name: newName,},Status: birdApiv1.BirdStatus{},Spec: birdApiv1.BirdSpec{Datetime: "2018-06-14T18:00:00Z03:00",AwayTeamGoals: 9,AwayTeam: "wangjq",HomeTeam: "demo",HomeTeamGoals: 10,},}_, err := c.client.Client.DemoV1().Birds("default").Create(namespace)if err != nil {panic(err)} }func (c *ResourceHandler) DeleteBird(name string) {if err := c.client.Client.DemoV1().Birds("default").Delete(name, &metav1.DeleteOptions{}); err != nil {panic(err)} }func (c *ResourceHandler) UpdateBird(name string) {result := c.GetBird(name)result.Spec.AwayTeam = "zzzzz"result.Spec.Datetime = "2222-12-22T22:22:00Z03:22"result.Spec.HomeTeam = "zzzzz"c.client.Client.DemoV1().Birds("default").Update(result) }func (c *ResourceHandler) ListBirds() {fmt.Println("============================ List All ============================")podList, _ := c.client.Client.DemoV1().Birds("default").List(metav1.ListOptions{})for key, value := range podList.Items {fmt.Println("第", key+1, "個pod.................")bytes, err := json.Marshal(value)if err != nil {return}fmt.Println(string(bytes))}for _, pod := range podList.Items {fmt.Printf("Name: %s, Status: %s, CreateTime: %s, Uid: %s\n",pod.ObjectMeta.Name, pod.Status, pod.ObjectMeta.CreationTimestamp, pod.GetUID())} }func (c *ResourceHandler) GetBird(name string) *birdApiv1.Bird {result, err := c.client.Client.DemoV1().Birds("default").Get(name, metav1.GetOptions{})if err != nil {panic(err)}return result }func main() {resourceHandler := newResourceHandler()resourceHandler.ListBirds()resourceHandler.CreateBird()resourceHandler.ListBirds()resourceHandler.UpdateBird(newName)resourceHandler.ListBirds()resourceHandler.DeleteBird(newName)resourceHandler.ListBirds() }4.運行測試
[root@wangjq demo]# go run client-demo.go &{0xc00026ccc0 0xc0002124b0} ============================ List All ============================ 第 1 個pod................. {"metadata":{"name":"bird-example","namespace":"default","selfLink":"/apis/demo.qianxin.com/v1/namespaces/default/birds/bird-example","uid":"dc47307a-df78-11e9-a2d6-52540058aad0","resourceVersion":"196","generation":1,"creationTimestamp":"2019-09-25T09:42:59Z"},"spec":{"datetime":"","homeTeam":"","homeTeamGoals":0,"awayTeam":"","awayTeamGoals":0},"status":{}} Name: bird-example, Status: {}, CreateTime: 2019-09-25 09:42:59 +0000 UTC, Uid: dc47307a-df78-11e9-a2d6-52540058aad0 ============================ List All ============================ 第 1 個pod................. {"metadata":{"name":"bird-example","namespace":"default","selfLink":"/apis/demo.qianxin.com/v1/namespaces/default/birds/bird-example","uid":"dc47307a-df78-11e9-a2d6-52540058aad0","resourceVersion":"196","generation":1,"creationTimestamp":"2019-09-25T09:42:59Z"},"spec":{"datetime":"","homeTeam":"","homeTeamGoals":0,"awayTeam":"","awayTeamGoals":0},"status":{}} 第 2 個pod................. {"metadata":{"name":"client-go-demo","namespace":"default","selfLink":"/apis/demo.qianxin.com/v1/namespaces/default/birds/client-go-demo","uid":"32718293-e03f-11e9-aab3-52540058aad0","resourceVersion":"522","generation":1,"creationTimestamp":"2019-09-26T09:22:44Z"},"spec":{"datetime":"2018-06-14T18:00:00Z03:00","homeTeam":"demo","homeTeamGoals":10,"awayTeam":"wangjq","awayTeamGoals":9},"status":{}} Name: bird-example, Status: {}, CreateTime: 2019-09-25 09:42:59 +0000 UTC, Uid: dc47307a-df78-11e9-a2d6-52540058aad0 Name: client-go-demo, Status: {}, CreateTime: 2019-09-26 09:22:44 +0000 UTC, Uid: 32718293-e03f-11e9-aab3-52540058aad0 ============================ List All ============================ 第 1 個pod................. {"metadata":{"name":"bird-example","namespace":"default","selfLink":"/apis/demo.qianxin.com/v1/namespaces/default/birds/bird-example","uid":"dc47307a-df78-11e9-a2d6-52540058aad0","resourceVersion":"196","generation":1,"creationTimestamp":"2019-09-25T09:42:59Z"},"spec":{"datetime":"","homeTeam":"","homeTeamGoals":0,"awayTeam":"","awayTeamGoals":0},"status":{}} 第 2 個pod................. {"metadata":{"name":"client-go-demo","namespace":"default","selfLink":"/apis/demo.qianxin.com/v1/namespaces/default/birds/client-go-demo","uid":"32718293-e03f-11e9-aab3-52540058aad0","resourceVersion":"523","generation":2,"creationTimestamp":"2019-09-26T09:22:44Z"},"spec":{"datetime":"2222-12-22T22:22:00Z03:22","homeTeam":"zzzzz","homeTeamGoals":10,"awayTeam":"zzzzz","awayTeamGoals":9},"status":{}} Name: bird-example, Status: {}, CreateTime: 2019-09-25 09:42:59 +0000 UTC, Uid: dc47307a-df78-11e9-a2d6-52540058aad0 Name: client-go-demo, Status: {}, CreateTime: 2019-09-26 09:22:44 +0000 UTC, Uid: 32718293-e03f-11e9-aab3-52540058aad0 ============================ List All ============================ 第 1 個pod................. {"metadata":{"name":"bird-example","namespace":"default","selfLink":"/apis/demo.qianxin.com/v1/namespaces/default/birds/bird-example","uid":"dc47307a-df78-11e9-a2d6-52540058aad0","resourceVersion":"196","generation":1,"creationTimestamp":"2019-09-25T09:42:59Z"},"spec":{"datetime":"","homeTeam":"","homeTeamGoals":0,"awayTeam":"","awayTeamGoals":0},"status":{}} Name: bird-example, Status: {}, CreateTime: 2019-09-25 09:42:59 +0000 UTC, Uid: dc47307a-df78-11e9-a2d6-52540058aad0?
轉載于:https://www.cnblogs.com/wangjq19920210/p/11593173.html
總結
以上是生活随笔為你收集整理的使用client-go自定义开发Kubernetes的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [视频教程] 如何在docker环境下的
- 下一篇: 数组对象根据某个属性取出重复的个数