【Kubernetes】Kubernetes的yaml文件中command的使用

command就是将命令在创建的容器中执行,有这些命令去完成一些工作,command用法和dockerfile中的cmd差不多, command可以单独写,也可以分成command和参数args,可以参考之前的CMD去理解,例如下面的写法都可以。

command: ['/bin/sh']


command:  ["rm", "-fr", "/var/lib/dbs/lost+found"]


command:
- 'sh'
- '-c'
- 'DATA_SOURCE_NAME="root@(localhost:3306)/" /bin/mysqld_exporter'


command: ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]


command: ["sh"]
args: ["-c","until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]


          livenessProbe:
            exec:
              command:
              - /bin/sh
              - -c
              - 'wget -O - -q --header "Authorization: Basic `echo -n \"$RABBIT_MANAGEMENT_USER:$RABBIT_MANAGEMENT_PASSWORD\" | base64`" http://localhost:15672/api/healthchecks/node | grep -qF "{\"status\":\"ok\"}"'
            initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
            periodSeconds: {{ .Values.livenessProbe.periodSeconds }}

另外args还有一种写法,可以理解成args后面是一个.sh文件,command来直接执行一个脚本文件,可以写相对复杂的脚本。

command: ['sh']
        args:
        - "-c"
        - |
          set -ex
          if [ ! -d "/opt/ShenTong/odbs/OSRDB" ];then
            mkdir /opt/ShenTong/odbs/
            cp -r /opt/OSRDB /opt/ShenTong/odbs/
          else
            echo "数据库文件已存在"
          fi

最后贴一个官方写的一个rabbitmq的完整例子 

spec:
      {{- if .Values.image.pullSecrets }}
      imagePullSecrets:
      {{- range .Values.image.pullSecrets }}
        - name: {{ . }}
      {{- end }}
      {{- end }}
      terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}
      securityContext:
{{ toYaml .Values.securityContext | indent 10 }}
      serviceAccountName: {{ template "rabbitmq-ha.serviceAccountName" . }}
      initContainers:
        - name: bootstrap
          image: {{ .Values.registry }}{{ .Values.busyboxImage.repository}}{{ .Values.arch }}:{{ .Values.busyboxImage.tag}}
          imagePullPolicy: {{ .Values.busyboxImage.pullPolicy }}
          command: ['sh']
          args:
          - "-c"
          - |
            set -ex
            cp /configmap/* /etc/rabbitmq
            rm -f /var/lib/rabbitmq/.erlang.cookie
            {{- if .Values.forceBoot }}
            if [ -d "${RABBITMQ_MNESIA_DIR}" ]; then
              touch "${RABBITMQ_MNESIA_DIR}/force_load"
            fi
            {{- end }}
          env:
          - name: POD_NAME
            valueFrom:
              fieldRef:
                apiVersion: v1
                fieldPath: metadata.name
          - name: RABBITMQ_MNESIA_DIR
            value: /var/lib/rabbitmq/mnesia/rabbit@$(POD_NAME).{{ template "rabbitmq-ha.fullname" . }}-discovery.{{ .Release.Namespace }}.svc.{{ .Values.clusterDomain }}
          resources:
{{ toYaml .Values.initContainer.resources | indent 12 }}
          volumeMounts:
            - name: configmap
              mountPath: /configmap
            - name: config
              mountPath: /etc/rabbitmq
            - name: {{ .Values.persistence.name }}
              mountPath: /var/lib/rabbitmq

 

### Kubernetes YAML 文件格式详解 #### 基本结构与字段解释 Kubernetes 中几乎所有资源对象都通过 YAML 或 JSON 文件定义,其中 YAML 是最常用的格式[^1]。下面是一个典型的 Kubernetes 资源对象的 YAML 文件基本结构: ```yaml apiVersion: v1 # API 版本号, 指定使用的API组和版本 kind: Pod # 对象种类, 如Pod、Service等 metadata: # 元数据部分, 包含名称和其他标签信息 name: my-pod # 资源的名字 spec: # 描述期望状态的具体规格 containers: # 容器列表 - name: app-container image: busybox:1.28 command: ["sh", "-c", "echo Hello Kubernetes! && sleep 3600"] ``` 此段代码展示了最基本的 `Pod` 类型资源配置文件模板。 #### TypeMeta 部分解析 TypeMeta 部分为每个 Kubernetes 资源提供了两个重要字段:`apiVersion` 和 `kind`。这两个字段帮助 Kubernetes 正确识别并处理相应的资源请求[^2]。 - **apiVersion**: 表明所用到的 API 组及其版本; - **kind**: 明确指出了当前文档代表哪种类型的 K8s 资源; 例如,在上述例子中,`apiVersion: v1` 表示使用的是核心 API 的第一个稳定版,而 `kind: Pod` 则表明这是一个 Pod 实体。 #### Metadata (元数据) Metadata 字段包含了关于资源的一些辅助性描述信息,比如名字 (`name`) 及其他自定义标签 (`labels`, `annotations`) 等。这部分内容主要用于标识唯一性和分类检索目的。 #### Spec (规范) Spec 字段是最为核心的部分之一,它规定了用户希望达到的目标状态——即所谓的“声明式配置”。这里列出了所有必要的参数设置来构建指定的对象实例。对于不同的 Kind 来说,Spec 下面的内容也会有所不同。 #### 创建与操作 Deployment 示例 为了更好地理解如何实际应用这些概念,考虑如下命令序列用于部署 Nginx 应用程序服务[^4]: ```bash kubectl create namespace jumpoint-ns # 创建命名空间jumpoint-ns kubectl apply -f nginx-deployment.yaml # 使用nginx-deployment.yaml创建Deployment kubectl get deployments -n jumpoint-ns # 查看新创建的deployment详情 kubectl get pods -n jumpoint-ns -o wide # 获取pod列表及相关细节 kubectl describe deployment -n jumpoint-ns jumpoint-web # 展开查看特定deployment的信息 ``` 以上命令集演示了一个完整的流程,从准备环境到最后验证部署成功与否的过程。 #### 验证 YAML 文件的有效性 确保编写的 YAML 文件语法正确非常重要。虽然 Kubernetes 自身能够执行一定程度上的语义校验,但在提交之前最好先利用第三方工具来进行预检以减少错误发生几率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值