kubernetesシリーズの16:Kubernetes CRD sample-controllerのコンパイルとテスト


一、前言
記事『kubernetesシリーズの14:Kubernetes CRD(CustomResourceDefinition)概要』では、CRDの定義およびバックエンドコントローラの実装を含むKubernetesが公式に提供するCRDの例を分析した.同時に、k 8 sのcontrollerについても、以下の2つの文章でより詳細な分析と例を示した.
  • A Deep Dive Into Kubernetes Controllers
  • Kubewatch, An Example Of Kubernetes Custom Controller

  • しかし、k 8 sが公式に提供するCRDおよびcontrollerの例にはコンパイルおよび実行に関する説明がないため、step-by-stepがコンパイル環境を設定し、コンパイルを行う例、Dockerfileによるワンタッチコンパイルおよび実行の例を示す.
    転載先https://blog.csdn.net/cloudvtech
    二、CRD example-controllerdeコンパイル
    2.1コンパイル環境
    CentOS Linux release 7.4.1708 (Core)  
    yum install -y go git 

    2.2ダウンロードコードと依存
    mkdir /root/gowork 
    export GOPATH=/root/gowork/ 
    cd /root/gowork/
    git clone https://github.com/kubernetes/sample-controller.git
    mv sample-controller src
    cd src
    mkdir -p k8s.io/sample-controller
    cp -a pkg k8s.io/sample-controller 
    go get k8s.io/apimachinery

    ここでapimachineryのインストールは、この記事のヒントに基づいています.そうしないと、次のようなエラーが発生します.
    Error: Failed executing generator: some packages had errors:
    type "k8s.io/apimachinery/pkg/runtime.Object" in k8s:deepcopy-gen:interfaces tag of type k8s.io/apimachinery/pkg/runtime.Object is not an interface, but: ""
    goroutine 1 [running]:

    2.3 codegenの実行
    ./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
    2.4コンパイルsample-controller
    \cp -af vendor/* ./
    rm -rf vendor/
    go build -v -o samplecontroller
    …
    k8s.io/sample-controller/pkg/apis/samplecontroller
    k8s.io/sample-controller/pkg/apis/samplecontroller/v1alpha1
    k8s.io/sample-controller/pkg/client/clientset/versioned/scheme
    k8s.io/sample-controller/pkg/client/clientset/versioned/typed/samplecontroller/v1alpha1
    k8s.io/sample-controller/pkg/client/clientset/versioned
    k8s.io/sample-controller/pkg/client/informers/externalversions/internalinterfaces
    k8s.io/sample-controller/pkg/client/listers/samplecontroller/v1alpha1
    k8s.io/sample-controller/pkg/client/informers/externalversions/samplecontroller/v1alpha1
    k8s.io/sample-controller/pkg/client/informers/externalversions/samplecontroller
    k8s.io/sample-controller/pkg/client/informers/externalversions
    k8s.io/sample-controller/pkg/signals

    コンパイルされたbinaryの名前はsamplecontrollerで、srcディレクトリの下にあります.
    転載先https://blog.csdn.net/cloudvtech
    三、sample-controllerを実行し、CRDを配置する
    3.1 example CRDの機能
    このCRDの機能は、FooタイプCRDのインスタンスexample-fooが作成されたときに、sample-controllerがexample-fooで指定されたreplicaに基づいて、対応する数のreplicaを持つnginxのdeploymentを配置することです.
    3.2 sample-controllerの実行
    sample-controllerのパラメータは次のとおりです.
    ./samplecontroller --help
    Usage of ./samplecontroller:
      -alsologtostderr
        	log to standard error as well as files
      -kubeconfig string
        	Path to a kubeconfig. Only required if out-of-cluster.
      -log_backtrace_at value
        	when logging hits line file:N, emit a stack trace
      -log_dir string
        	If non-empty, write log files in this directory
      -logtostderr
        	log to standard error instead of files
      -master string
        	The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.
      -stderrthreshold value
        	logs at or above this threshold go to stderr
      -v value
        	log level for V logs
      -vmodule value
        	comma-separated list of pattern=N settings for file-filtered logging

    kubeconfigでclusterのaccessを指定し、Kubernetesのclusterをテストするkubeconfigは以下の位置にあります.
    /etc/kubernetes/admin.conf 

    実行:
    ./samplecontroller -kubeconfig /etc/kubernetes/admin.conf 
    

    3.3 CRDの導入
    [root@k8s-master src]# kubectl apply -f artifacts/examples/crd.yaml 
    customresourcedefinition.apiextensions.k8s.io "foos.samplecontroller.k8s.io" created
    [root@k8s-master src]# kubectl apply -f artifacts/examples/example-foo.yaml 
    foo.samplecontroller.k8s.io "example-foo" created

    3.4ステータスの表示
    [root@k8s-master src]# kubectl get crd
    NAME                           AGE
    foos.samplecontroller.k8s.io   52s
    
    
    [root@k8s-master src]# kubectl get Foo
    NAME          AGE
    example-foo   44s
    
    
    [root@k8s-master src]# kubectl describe Foo example-foo
    Name:         example-foo
    Namespace:    default
    Labels:       
    Annotations:  kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"samplecontroller.k8s.io/v1alpha1","kind":"Foo","metadata":{"annotations":{},"name":"example-foo","namespace":"default"},"spec":{"deploym...
    API Version:  samplecontroller.k8s.io/v1alpha1
    Kind:         Foo
    Metadata:
      Cluster Name:        
      Creation Timestamp:  2018-05-25T20:28:47Z
      Generation:          1
      Resource Version:    79222
      Self Link:           /apis/samplecontroller.k8s.io/v1alpha1/namespaces/default/foos/example-foo
      UID:                 3a4e7cd3-605a-11e8-9f24-000c29d3e746
    Spec:
      Deployment Name:  example-foo
      Replicas:         1
    Status:
      Available Replicas:  1
    Events:
      Type    Reason  Age               From               Message
      ----    ------  ----              ----               -------
      Normal  Synced  16s (x8 over 1m)  sample-controller  Foo synced successfully

    deploymentとPODの表示
    [root@k8s-master src]# kubectl get deployments
    NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    example-foo   1         1         1            1           1m
    [root@k8s-master src]# kubectl get pods
    NAME                          READY     STATUS    RESTARTS   AGE
    example-foo-d74cd7fbc-nql68   1/1       Running   0          2m

    転載先https://blog.csdn.net/cloudvtech
    四、Dockerfile方式のコンパイルと配置
    4.1 Dockerfile
    FROM centos
    ENV PATH=$PATH:/user/bin/
    ENV GOPATH=/gowork
    
    WORKDIR /gowork
    RUN yum install -y go git
    RUN git clone https://github.com/kubernetes/sample-controller.git
    RUN mv sample-controller src
    
    WORKDIR /gowork/src
    RUN mkdir -p k8s.io/sample-controller
    RUN cp -a pkg k8s.io/sample-controller
    RUN echo || go get k8s.io/apimachinery
    RUN \cp -af vendor/* ./
    RUN rm -rf vendor/
    RUN go build -v -o samplecontroller

    4.2 build
    docker build -t samplecontrolle .
    

    4.3運転
    [root@k8s-master sample-controller_docker]# docker run -it -v /etc/kubernetes:/k8s a9
    [root@9640be7aa387 src]# /gowork/src/samplecontroller -kubeconfig /k8s/admin.conf 

    転載先https://blog.csdn.net/cloudvtech