在部署文件中运行终端命令

时间:2020-07-20 12:11:56

标签: linux docker kubernetes deployment

我想运行一个名为rstudio软件包管理器的应用程序。部署后,它具有一些要运行的终端命令。有什么方法可以在部署文件中添加这些命令?我尝试过这种方式,但出现崩溃环回错误。我是编写部署文件的新手。我是在做错什么还是弄乱了语法?

apiVersion: apps/v1 
kind: Deployment
metadata:
  name: rspm-deployment
spec:
  selector:
    matchLabels:
      app: rspm
  replicas: 1 
  template:
    metadata:
      labels:
        app: rspm
    spec:
      nodeSelector:
        kubernetes.io/hostname: nckaoepekin.local
      containers:
      - env:
        - name: RSPM_LICENSE
          value: my_license_key
        image: rstudio/rstudio-package-manager:latest
        name: rstudio-package-manager
        command: ["/bin/sh"]
        args: ["-c", "alias rspm='/opt/rstudio-pm/bin/rspm'; rspm create repo --name=prod-cran --description='Access CRAN packages'; rspm subscribe --repo=prod-cran --source=cran; rspm sync"]
        ports:
        - containerPort: 4242
        resources: {}
        securityContext:
          privileged: true
      restartPolicy: Always
status: {}

---
kind: Service
apiVersion: v1
metadata:
  name: rstudio-pm
spec:
  selector:
    app: rspm
  ports:
  - protocol: TCP
    port: 4242
    targetPort: 4242
    nodePort: 31010
  type: NodePort

我要添加这些终端命令(也在上面指定)

alias rspm='/opt/rstudio-pm/bin/rspm'
rspm create repo --name=prod-cran --description='Access CRAN packages'
rspm subscribe --repo=prod-cran --source=cran
rspm sync

当我删除指定的命令和参数时,部署文件正在工作。但是,当我添加命令和参数时,我遇到了crashloopback错误。任何线索将不胜感激。谢谢

3 个答案:

答案 0 :(得分:2)

您可以使用poststart钩子here

lifecycle:
  postStart:
    exec:
      command:
        - "sh"
        - "-c"
        - |
          alias rspm='/opt/rstudio-pm/bin/rspm' &&
          rspm create repo --name=prod-cran --description='Access CRAN packages'&&
          rspm subscribe --repo=prod-cran --source=cran &&
          rspm sync

答案 1 :(得分:1)

我在所有bash命令之后添加了睡眠功能,因为这些文件需要花费时间才能执行。

            exec:
              command:
                - "sh"
                - "-c"
                - |
                  alias rspm='/opt/rstudio-pm/bin/rspm' &&
                  sleep 5 &&
                  rspm create repo --name=prod-cran --description='Access CRAN packages' &&
                  sleep 5 &&
                  rspm subscribe --repo=prod-cran --source=cran &&
                  sleep 5 &&
                  rspm sync

成功了!

答案 2 :(得分:0)

尝试使用postStart容器生命周期事件,如显示here

编辑

  1. 在容器映像中创建并存储文件
cat > postStart.sh <<
alias rspm='/opt/rstudio-pm/bin/rspm'
rspm create repo --name=prod-cran --description='Access CRAN packages'
rspm subscribe --repo=prod-cran --source=cran
rspm sync
EOF
  1. 尝试如下运行postStart钩子
    lifecycle:
      postStart:
        exec:
          command:
            - /bin/bash
            - postStart.sh