首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Skaffold使用Minikube无注册表

Skaffold使用Minikube无注册表
EN

Stack Overflow用户
提问于 2018-05-15 21:49:48
回答 2查看 7.4K关注 0票数 13

我遇到了Skaffold,试图简化当地码头形象的发展。我们基本上希望能够快速迭代图像,并使用现有的稳定舵机图表版本来部署它。

文件中说:

https://github.com/GoogleContainerTools/skaffold#installation

  1. 码头图像注册中心。您的码头客户端应配置为推送到外部对接者映像存储库。如果您使用的是桌面集群的minikube或Docker,则可以跳过此要求。

但是,当我试图运行示例examples/helm-deployment时,它实际上试图连接到注册表:

代码语言:javascript
复制
$ skaffold dev
...
The push refers to repository [docker.io/library/skaffold-helm]
b3fb485368bf: Preparing
6f67560e4591: Preparing
d626a8ad97a1: Preparing
WARN[0012] run: build: build step: running push: denied: requested access to the resource is denied

我是否总是需要一个注册表,甚至使用Minikube和Skaffold?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-15 22:22:40

不,你不需要外部注册表。

使用下面的命令,您应该能够在主机mac/linux机器上使用docker,并与minikube中的docker守护进程对话:

代码语言:javascript
复制
eval $(minikube docker-env)

docker build时,图像直接在迷你库中创建。

来自通过Minikube在本地运行Kubernetes

票数 8
EN

Stack Overflow用户

发布于 2018-06-19 20:49:16

使用skaffold,您不需要任何注册表,如果您想部署到minikube。默认情况下,它不需要任何外部注册表就可以将图像无缝放置到minikube。

考虑以下deployment.yaml文件:

代码语言:javascript
复制
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: petstore-frontend
  labels:
    app: petstore
    tier: frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: petstore
      tier: frontend
  template:
    metadata:
      labels:
        app: foo
        tier: frontend
    spec:
      containers:
        - name: frontend
          image: petstore/frontend
          imagePullPolicy: Always
          ports:
            - containerPort: 80

请注意,image字段不包含任何标记,因为skaffold将为您注入一个标记。

最小的skaffold.yaml文件如下所示:

代码语言:javascript
复制
apiVersion: skaffold/v1alpha2
kind: Config
profiles:
  - name: minikube
    build:
      artifacts:
        - imageName: petstore/frontend
    deploy:
        manifests:
          - deployment.yaml

在这里,imageName应该与deployment.yaml文件中的image字段值匹配。

现在您只需运行skaffold run -p minikube,它将构建您的映像,并将其放到minikube并应用部署。

不过,在通过Helm图表进行部署时,您还需要指定一些很小但很重要的东西。

考虑下面的deployment.yaml模板(为了简洁起见,我省略了一些字段):

代码语言:javascript
复制
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: {{ template "petstore-frontend.fullname" . }}
  labels:
    # <labels>
spec:
  replicas: 1
  selector:
    matchLabels:
      # <labels>
  template:
    metadata:
      labels:
        # <labels>
    spec:
      containers:
        - name: {{ template "petstore-frontend.name" . }}
          image: {{ .Values.image.repository }}{{ if .Values.image.tag }}:{{ .Values.image.tag }}{{ end }}
          imagePullPolicy: Always
          ports:
            - containerPort: 80

重要的是有可能指定没有任何标记的图像,所以skaffold可以为您注入它。

然后,skaffold.yaml文件将如下所示:

代码语言:javascript
复制
apiVersion: skaffold/v1alpha2
kind: Config
profiles:
  - name: minikube
    build:
      artifacts:
        - imageName: petstore/frontend
    deploy:
      helm:
        releases:
          - name: petstore-frontend
            chartPath: charts/petstore-frontend
            values:
              "image.repository": petstore/frontend
            setValues:
              "image.tag": ""

在这里,image.repository应该与artifacts部分中的imageName完全相同,而且image.tag也被设置为空字符串,正如上面所说的,允许skaffold将其注入。

总之,值得注意的是,skaffold仍然在alpha中,所以API可能会改变,也许不再需要“技巧”了。尽管如此,skaffold已经为快速应用程序的开发和部署提供了很多便利。

我希望这能帮到你。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50359633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档