kubernetes 为什么skaffold构建工作,而不是skaffold运行或开发?

ztmd8pv5  于 2022-12-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(136)

我有一个本地NPM/Yarn存储库“verdaccio”在Docker容器中运行,绑定到我的主机http://0.0.0.0:4873/
我在用米库伯测试斯卡福尔德。
我的Dockerfile配置需要两个构建参数:

ARG NPM_TOKEN
ARG PACKAGE_REPO_DOMAIN

这是用在我的.yarnrc.yml文件:

yarnPath: .yarn/releases/yarn-3.2.0.cjs
nodeLinker: "node-modules"
npmRegistryServer: "http://${PACKAGE_REPO_DOMAIN}:4873/"
httpRetry: 10
httpTimeout: 100000
# networkConcurrency: 2
unsafeHttpWhitelist: 
  - "0.0.0.0"
  - localhost
  - verdaccio
  - host.minikube.internal
  - host.docker.internal
npmRegistries:
  "http://${PACKAGE_REPO_DOMAIN}:4873":
    npmAlwaysAuth: true
    npmAuthToken: ${NPM_TOKEN}

配置的域是host.minikube.internal。下面是我的skaffold yaml,注意我将network绑定到“host”:

apiVersion: skaffold/v2beta28
kind: Config
build:
  local:
    push: false
  artifacts:
  - image: my-app
    docker:
      dockerfile: ./my-app/Dockerfile
      target: dev
      network: "host"
      buildArgs:
        NPM_TOKEN: "***REDACTED***"
        PACKAGE_REPO_DOMAIN: "host.minikube.internal"
    context: ../
    sync: 
      manual:
        - src: 'my-app/**/*.*'
          dest: ./my-app
        - src: './shared'
          dest: './shared'
        - src: '.yarn'
          dest: '.yarn'
deploy:
  helm:
    releases:
      - name: my-app
        chartPath: ../../infrastructure/helm/charts/my-app
        artifactOverrides:
          image: my-app
        imageStrategy:
          fqn: {}

当运行skaffold build时,它可以正常工作并构建映像。但是当运行skaffold devskaffold run时,yarn install在构建时挂起。这意味着yarn无法到达verdaccio本地npm存储库。尽管我不明白为什么-它仍然在minikube环境中构建,应该使用host.minikube.internal -〉localhost吗?
NB:我记得在skaffold之前也运行这个(仍然失败):

skaffold config set --global local-cluster true
eval $(minikube -p minikube docker-env)

编辑

此后,我在这里作了一个最低限度的复制:https://github.com/gitn00b1337/skaffold-verdaccio
需要Yarn、迷你库伯和 Helm 。
CD放入项目,然后:

$ sudo chmod -R a+rw ./verdaccio/storage 
$ yarn install 
$ minikube start
$ docker-compose up (seperate terminal)
$ skaffold config set --kube-context minikube local-cluster true
$ eval $(minikube -p minikube docker-env)
$ skaffold build # works

$ skaffold run # fails
jyztefdp

jyztefdp1#

在我们的项目中,我们必须做到以下几点才能让verdaccio工作:
添加新用户:
npm adduser --registry http://localhost:4873/
使用以下命令在共享模块和导入模块的服务中创建.npmrc文件:

@my-app:registry=http://localhost:4873
strict-ssl=false

使用yarn build && yarn publish发布共享模块verdaccio,然后如果导航到,您应该能够在浏览器中看到它
http://localhost:4873
然后使用yarn install <shared-module>在服务中安装共享模块。
我认为您的安装程序挂起的原因是缺少.nmprc文件或需要strict-ssl=false
添加后,希望在执行skaffold run时它将部署到minikube

相关问题