【问题标题】:Error when trying to expose a docker container in minikube尝试在 minikube 中公开 docker 容器时出错
【发布时间】:2021-01-26 02:40:02
【问题描述】:

我正在使用minikube学习docker,但是遇到了一个问题。

我正在关注 Kubernetes in Action 中的示例,我正在尝试从我的 docker hub 帐户中获取一个 pod,但我无法使这个 pod 可见。

如果我跑

kubectl get pod

我可以看到 pod 存在。

NAME    READY   STATUS    RESTARTS   AGE
kubia   1/1     Running   1          6d22h

但是当我做第一步创建服务时

kubectl expose rc kubia --type=LoadBalancer --name kubia-http service "kubia-http" exposed

我收到此错误返回

Error from server (NotFound): replicationcontrollers "kubia" not found
Error from server (NotFound): replicationcontrollers "service" not found
Error from server (NotFound): replicationcontrollers "kubia-http" not found
Error from server (NotFound): replicationcontrollers "exposed" not found

任何想法为什么我会收到此错误以及我需要做些什么来纠正它?

我在 mac Mojave (v10.14.6) 上使用 minikube v1.13.1,我无法升级,因为我使用的是公司提供的机器,所有更新都由总部控制。

【问题讨论】:

  • 我建议在 YAML 语法中创建一个 Service,将其与您的其他部署工件一起签入,然后使用 kubectl apply -f kubia-service.yml 安装它;避免像kubectl expose这样的命令式命令。
  • service "kubia-http" exposed 应该是您正在阅读的教程中kubectl expose 命令的输出吗?删除这些词有帮助吗?)

标签: kubernetes minikube


【解决方案1】:

复制控制器是比在 Kubernetes 中创建服务和部署更古老的概念,请查看 this answer

服务模板如下所示:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: App
  ports:
    - protocol: tcp
      port: 80
      targetPort: 8080

然后将服务配置保存到文件中,然后kubectl apply -f <filename>

查看更多信息:https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service

【讨论】:

    【解决方案2】:

    在本书中,使用的命令是kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1,它曾经在写书的时候创建ReplicationController,但是这个对象目前已被弃用。

    现在kubectl run 命令创建没有 ReplicationController 的独立 pod。因此,要公开它,您应该运行:

    kubectl expose pod kubia --type=LoadBalancer --name kubia-http
    

    为了创建复制,建议使用Deployment。要使用 CLI 创建它,您只需运行

    kubectl create deployment <name_of_deployment> --image=<image_to_be_used>
    

    它将创建一个部署和一个 pod。然后可以像之前的 pod 曝光一样进行曝光:

    kubectl expose deployment kubia --type=LoadBalancer --name kubia-http
    

    【讨论】:

    • 这个答案对于正在阅读第 2 章“Docker 和 Kubernetes 的第一步”的人来说没有用处,对 Kubernetes 几乎一无所知,并且实际上即将在 Kubernetes 上运行他们的第一个应用程序。这样的用户还不知道 pod 是什么,暴露 pod 意味着什么,什么是复制或为什么要创建一个,也不知道什么是部署。对于这样的用户,不清楚上面的哪个命令,或者上面命令的哪个子集,应该替换书中的命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多