标签: kubernetes-pod

如何在 kubernetes 的环境变量中设置 mountPath 的值?

我使用 configMap 来存储挂载路径值,但是当我调用 pod 时,它不起作用,似乎无法将 mountPath 属性分配给环境变量。

这是我的代码:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
        env:
        - name: MOUNT_PATH
          valueFrom:
           configMapKeyRef:
            name: my-configMap
            key: MOUNT_PATH
        volumeMounts:
        - name: nginx-volume
          mountPath: $(MOUNT_PATH)
      volumes:
      - name: nginx-volume
        persistentVolumeClaim:
         claimName: my-pvc

     ---


apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configMap
  namespace: default
data:
  MOUNT_PATH: "/opt/somepath"
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod

3
推荐指数
1
解决办法
9682
查看次数

如何使用“kubectl”CLI 在 pod 内挂载卷

我想使用 CLI 创建一个 pod kubectl,它将/etc/os-release在 pod 容器内挂载主机路径并显示文件内容/etc/os-release。是否可以使用单行kubectl命令来做到这一点?

kubernetes kubectl persistent-volumes kubernetes-pod

3
推荐指数
1
解决办法
3263
查看次数

如何从部署中获取 Pod 名称?

我们创建了部署,进而创建了 pod。我需要获取由我的部署文件创建的 Pod 名称。

kubectl get -f deployment.yml
Run Code Online (Sandbox Code Playgroud)

上面的命令列出了部署名称。如果我输入,kubectl get pod它会显示 Pod 名称,其中添加了一些随机的额外字符串和部署名称。

即使我使用该-o json选项仍然无法获取 Pod 名称。

如何获取部署创建的所有Pod?即使是 shell 脚本方式也可以。

我的部署文件如下所示

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    ansible: test-2020-05-26-00-04-1590476651
    podRef: pod-ansibles
  name: rd-2020-05-26-00-04-1590476651
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nginx
        ...
        ....
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以获取所有具有部署标签“test-2020-05-26-00-04-1590476651”的 Pod 吗?

当我尝试的时候'kubectl get pod -l ansible=test-2020-05-26-00-04-1590476651'。表明

'No resources found in default namespace.'似乎只能显示部署名称'kubectl get deploy -l ansible=test-2020-05-26-00-04-1590476651'

但我需要部署中的所有 pod 名称。

shell kubernetes kubernetes-pod

3
推荐指数
1
解决办法
5732
查看次数

Kubernetes HPA(具有自定义指标)扩展策略

从 Kubernetes v1.18 开始,v2beta2 API 允许通过 Horizo​​ntal Pod Autoscalar (HPA) 行为字段配置扩展行为。我计划将具有自定义指标的 HPA 应用于 StatefulSet

我正在查看的用例是使用自定义指标(例如我的应用程序上的用户会话数)进行扩展,但 HPA 根本不会缩小。K8s SIG 自动缩放增强功能也描述了此用例 - “HPA 的可配置缩放速度 >> 故事 4:照常缩放,不要缩小”

behavior:
  scaleDown:
    policies:
    - type: pods
      value: 0
Run Code Online (Sandbox Code Playgroud)

用户会话可能会保持活动状态几分钟到几小时。从 StatefulSet 的 1 个副本开始,随着用户会话数量达到上限(使用 Prometheus 收集器公开,随后使用 HPA 自定义指标选项进行配置),应用程序 Pod 将横向扩展。新的 Pod 将开始为新用户提供服务。

由于这是一个 StatefulSet 并且不能突然缩小,因此我正在寻求有关当新副本上的用户会话降至 0 时缩小规模的方法的帮助。上面的链接说缩小可以通过单独的过程来控制。不知道该怎么做?寻找一些指点。

谢谢。

kubernetes kubernetes-statefulset kubernetes-pod horizontal-pod-autoscaling

3
推荐指数
1
解决办法
2406
查看次数

无法使用 NodePort 服务从浏览器访问 Microk8s 服务

我根据此处的步骤在我的 ubuntu 计算机上安装了 microk8s https://ubuntu.com/kubernetes/install#single-node

然后我按照 kubernetes 官方教程创建并公开了这样的部署

microk8s.kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

microk8s.kubectl expose deployment/kubernetes-bootcamp --type=NodePort --port 8083
Run Code Online (Sandbox Code Playgroud)

这是我的kubectl get services输出

akila@ubuntu:~$ microk8s.kubectl get services
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.152.183.1    <none>        443/TCP          25h
kubernetes-bootcamp   NodePort    10.152.183.11   <none>        8083:31695/TCP   17s
Run Code Online (Sandbox Code Playgroud)

这是我的kubectl get pods输出

akila@ubuntu:~$ microk8s.kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
kubernetes-bootcamp-6f6656d949-rllgt   1/1     Running   0          51m
Run Code Online (Sandbox Code Playgroud)

但我无法使用http://localhost:8083或使用从浏览器访问该服务http://10.152.183.11:31695

当我尝试 http://localhost:31695 时,我收到 ERR_CONNECTION_REFUSED。

如何从浏览器访问此“kubernetes-bootcamp”服务?我错过了什么吗?

kubernetes kubernetes-ingress kubernetes-pod microk8s

3
推荐指数
1
解决办法
7694
查看次数

使用generateName 获取由helm 安装的yaml 文件

我有 upload.yaml 文件,它将脚本上传到 mongo,我用 helm 打包。

apiVersion: batch/v1
kind: Job
metadata:
  generateName: upload-strategy-to-mongo-v2
spec:
  parallelism: 1
  completions: 1
  template:
    metadata:
      name: upload-strategy-to-mongo
    spec:
      volumes:
      - name: upload-strategy-to-mongo-scripts-volume
        configMap:
          name: upload-strategy-to-mongo-scripts-v3
      containers:
      - name: upload-strategy-to-mongo
        image: mongo
        env:
        - name: MONGODB_URI
          value: @@@@
        - name: MONGODB_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongodb-user
              key: @@@@
        - name: MONGODB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongodb-user
              key: @@@@@
        volumeMounts:
          - mountPath: /scripts
            name: upload-strategy-to-mongo-scripts-volume
        command: ["mongo"]
        args:
          - $(MONGODB_URI)/ravnml
          - --username
          - $(MONGODB_USERNAME)
          - --password
          - $(MONGODB_PASSWORD)
          - …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubectl kubernetes-helm kubernetes-pod

3
推荐指数
1
解决办法
3475
查看次数

k8s:同一部署的 Pod 之间进行通信

在属于同一副本集(部署)的 Pod 之间进行通信的推荐方式是什么?是否可以从给定的 pod 中查找其他 pod 的 url?

或者副本集不是一个正确的方法?

寻找正确的 k8s 方法来做到这一点。谢谢!

kubernetes kubernetes-pod

3
推荐指数
1
解决办法
1364
查看次数

kubectl 删除具有部署名称的 pod

我有时经常使用 pod 进行调试kubectl delete pod,因此它会更新容器映像。但每次我都必须查找 pod 的完整名称:

kubectl delete pod deployment_name-56fccbbfb8g4rj6
Run Code Online (Sandbox Code Playgroud)

如何在不知道哈希值的情况下删除 Pod?

containers kubernetes kubectl kubernetes-pod

3
推荐指数
1
解决办法
5491
查看次数

如何访问在另一个命名空间中创建的服务

我在访问另一个命名空间中存在的服务时遇到问题。

我有 2 个命名空间(在同一集群中)airflow-dev 和 dask-dev。

在此输入图像描述

在 dask-dev 命名空间中,我部署了 dask 集群(dask 调度程序和工作人员)。此外,还为 dask-scheduler pod 创建了一个服务(集群 IP)。我可以使用“kubectl port-forward”命令从 chrome 访问 dask-scheduler pod。

kubectl port-forward --namespace dask-dev svc/dask-dev-scheduler 5002:80

但是,我无法从airflow-dev命名空间中存在的pod(airflow-scheduler)访问服务(或dask-scheduler pod)。尝试使用以下命令访问它时出现“找不到主机或服务”错误

dask-dev-scheduler.dask-dev.svc.cluster.local:8786

以下是我为 dask-dev-scheduler 创建的服务。您能否让我知道如何从 airflow-dev 命名空间访问该服务。

apiVersion: v1
metadata:
  name: dask-dev-scheduler
  namespace: dask-dev
  labels:
    app: dask-dev
    app.kubernetes.io/managed-by: Helm
    chart: dask-dev-4.5.7
    component: scheduler
    heritage: Helm
    release: dask-dev
  annotations:
    meta.helm.sh/release-name: dask-dev
    meta.helm.sh/release-namespace: dask-dev
spec:
  ports:
    - name: dask-dev-scheduler
      protocol: TCP
      port: 8786
      targetPort: 8786
    - name: dask-dev-webui
      protocol: TCP
      port: 80
      targetPort: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-pod

3
推荐指数
1
解决办法
1万
查看次数

使用 kubectl 检查 pod 的限制和请求

任何人都可以帮助我使用命令来查看 Pod 或 Pod 中容器的限制和请求吗?我尝试过 Kubectl describe pod, kubectl get pod --output=yaml, kubectl describe node- 显示当前限制,但不显示配置的限制。我想查看 yaml 中配置的限制和请求。

谢谢。

kubernetes kubectl kubernetes-pod

3
推荐指数
1
解决办法
6892
查看次数