我使用 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) 我想使用 CLI 创建一个 pod kubectl,它将/etc/os-release在 pod 容器内挂载主机路径并显示文件内容/etc/os-release。是否可以使用单行kubectl命令来做到这一点?
我们创建了部署,进而创建了 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 名称。
从 Kubernetes v1.18 开始,v2beta2 API 允许通过 Horizontal 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
我根据此处的步骤在我的 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”服务?我错过了什么吗?
我有 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) 在属于同一副本集(部署)的 Pod 之间进行通信的推荐方式是什么?是否可以从给定的 pod 中查找其他 pod 的 url?
或者副本集不是一个正确的方法?
寻找正确的 k8s 方法来做到这一点。谢谢!
我有时经常使用 pod 进行调试kubectl delete pod,因此它会更新容器映像。但每次我都必须查找 pod 的完整名称:
kubectl delete pod deployment_name-56fccbbfb8g4rj6
Run Code Online (Sandbox Code Playgroud)
如何在不知道哈希值的情况下删除 Pod?
我在访问另一个命名空间中存在的服务时遇到问题。
我有 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) 任何人都可以帮助我使用命令来查看 Pod 或 Pod 中容器的限制和请求吗?我尝试过
Kubectl describe pod,
kubectl get pod --output=yaml,
kubectl describe node- 显示当前限制,但不显示配置的限制。我想查看 yaml 中配置的限制和请求。
谢谢。