kubernetes - 运行 Kubernetes 示例 Controller

标签 kubernetes

我正尝试通过链接 https://github.com/kubernetes/sample-controller 运行 Kubernetes 示例 Controller 示例.我在 Ubuntu 18.04 系统上设置了 repo,并且能够构建 sample-controller 包。 但是,当我尝试运行 go 包时,出现了一些错误并且无法调试问题。有人可以帮我解决这个问题吗?

以下是我遵循的步骤:

user@ubuntu-user:~$ go get k8s.io/sample-controller
user@ubuntu-user:~$ cd $GOPATH/src/k8s.io/sample-controller

这是我在运行 Controller 时遇到的错误:

user@ubuntu-user:~/go/src/k8s.io/sample-controller$ ./sample-controller -kubeconfig=$HOME/.kube/config
E0426 15:05:57.721696   31517 reflector.go:125] k8s.io/sample-controller/pkg/generated/informers/externalversions/factory.go:117: Failed to list *v1alpha1.Foo: the server could not find the requested resource (get foos.samplecontroller.k8s.io)

Kubectl 版本:

user@ubuntu-user:~$ kubectl version 
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:11:31Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.1", GitCommit:"b7394102d6ef778017f2ca4046abbaa23b88c290", GitTreeState:"clean", BuildDate:"2019-04-08T17:02:58Z", GoVersion:"go1.12.1", Compiler:"gc", Platform:"linux/amd64"```

最佳答案

我已经重现了你的问题。本教程中的命令顺序错误。

在这种情况下,由于缺少资源 (samplecontroller),您会收到此错误

$ ./sample-controller -kubeconfig=$HOME/.kube/config
E0430 12:55:05.089624  147744 reflector.go:125] k8s.io/sample-controller/pkg/generated/informers/externalversions/factory.go:117: Failed to list *v1alpha1.Foo: the server could not find the requested resource (get foos.samplecontroller.k8s.io)
^CF0430 12:55:05.643778  147744 main.go:74] Error running controller: failed to wait for caches to sync
goroutine 1 [running]:
k8s.io/klog.stacks(0xc0002feb00, 0xc000282200, 0x66, 0x1f5)
    /usr/local/google/home/user/go/src/k8s.io/klog/klog.go:840 +0xb1
k8s.io/klog.(*loggingT).output(0x2134040, 0xc000000003, 0xc0002e12d0, 0x20afafb, 0x7, 0x4a, 0x0)
    /usr/local/google/home/user/go/src/k8s.io/klog/klog.go:791 +0x303
k8s.io/klog.(*loggingT).printf(0x2134040, 0x3, 0x14720f2, 0x1c, 0xc0003c1f48, 0x1, 0x1)
    /usr/local/google/home/user/go/src/k8s.io/klog/klog.go:690 +0x14e
k8s.io/klog.Fatalf(...)
    /usr/local/google/home/user/go/src/k8s.io/klog/klog.go:1241
main.main()
    /usr/local/google/home/user/go/src/k8s.io/sample-controller/main.go:74 +0x3f5

你可以验证这个api没有被创建

$ kubectl api-versions | grep sample
$ <emptyResult>

在本教程中,您可以使用命令创建自定义资源定义

$ kubectl create -f artifacts/examples/crd.yaml
customresourcedefinition.apiextensions.k8s.io/foos.samplecontroller.k8s.io created

现在你可以搜索这个CRD,它会出现在列表中。

$ kubectl api-versions | grep sample
samplecontroller.k8s.io/v1alpha1

下一步是创建 Foo 资源

$ kubectl create -f artifacts/examples/example-foo.yaml
foo.samplecontroller.k8s.io/example-foo created

这些命令还不会创建任何对象。

user@user:~/go/src/k8s.io/sample-controller$ kubectl get all
NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   XX.XXX.XXX.XX   <none>        443/TCP   14d

所有资源都将在您运行 ./sample-controller -kubeconfig=$HOME/.kube/config 后创建

user@user:~/go/src/k8s.io/sample-controller$ ./sample-controller -kubeconfig=$HOME/.kube/config
user@user:~/go/src/k8s.io/sample-controller$ kubectl get all
NAME                               READY   STATUS    RESTARTS   AGE
pod/example-foo-6cbc69bf5d-8k59h   1/1     Running   0          43s

NAME                 TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.39.240.1   <none>        443/TCP   14d

NAME                          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/example-foo   1         1         1            1           43s

NAME                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/example-foo-6cbc69bf5d   1         1         1       43s

正确顺序:

$ go get k8s.io/sample-controller
$ cd $GOPATH/src/k8s.io/sample-controller
$ go build -o sample-controller .
$ kubectl create -f artifacts/examples/crd.yaml
$ kubectl create -f artifacts/examples/example-foo.yaml
$ ./sample-controller -kubeconfig=$HOME/.kube/config
$ kubectl get deployments

关于kubernetes - 运行 Kubernetes 示例 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55875514/

相关文章:

Jenkins Kubernetes 插件与 containerd

docker - 将自签名 SSL 证书用于部署镜像

kubernetes - dotnet 核心应用 api 不会在 kubernetes 上继续运行

kubernetes - 加入 x509 : certificate has expired or is not yet valid

kubernetes - 一个pod可以运行在多个节点上吗?

google-compute-engine - 在Google Compute Engine上运行Kubernetes集群后,是否应该编辑Salt tar文件?

kubernetes - Prometheus:监控外部 K8s 集群的更好选择

linux - Kubernetes 工作节点 cpu 和内存请求始终保持为零

kubernetes - 如何管理微服务中的状态?

azure - 集群更新失败