是否可以使用 pod 内运行的容器拍摄图像或快照kubectl?
通过docker,可以使用docker commit创建容器映像的命令,我们可以从中生成更多容器。我想了解我们是否可以做类似的事情kubectl。
我正在尝试使用以下文件运行外部bashyaml脚本。
该脚本位于该/scripts/run.sh文件夹内。我也已经给出了defaultMode: 0777
这是我得到的错误。
sh: 0: Can't open /scripts/run.sh
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
data:
script.sh: |-
echo "Hello world!"
kubectl get pods
kind: ConfigMap
metadata:
name: script-configmap
---
apiVersion: batch/v1
kind: Job
metadata:
labels:
app: script-job
name: script-job
spec:
backoffLimit: 2
template:
spec:
containers:
- command:
- sh
- /scripts/run.sh
image: 'bitnami/kubectl:1.12'
name: script
volumeMounts:
- name: script-configmap
mountPath: /scripts
subPath: run.sh
readOnly: false
restartPolicy: Never
volumes:
- name: script-configmap
configMap:
name: script-configmap
defaultMode: 0777
Run Code Online (Sandbox Code Playgroud) 设以下服务:
serivce1.yml
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
type: ClusterIP
ports:
- port: 90
name: port0
targetPort: 40000
selector:
app: nginx
Run Code Online (Sandbox Code Playgroud)
我申请如下:kubectl apply -f service1.yml
现在我想更改端口部分。我可以编辑 yml 并再次应用,但我更喜欢使用 patch :
kubectl patch service service1 -p '{"spec":{"ports": [{"port": 80,"name":"anotherportspec"}]}}'
service/service1 patched
Run Code Online (Sandbox Code Playgroud)
但此命令添加一个新端口并保留旧端口:
$ kubectl describe svc service1
Name: service1
Namespace: abdelghani
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Families: <none>
IP: 10.98.186.21
IPs: <none>
Port: anotherportspec 80/TCP
TargetPort: 80/TCP
Endpoints: 10.39.0.3:80
Port: port0 90/TCP
TargetPort: 40000/TCP
Endpoints: …Run Code Online (Sandbox Code Playgroud) 我想转发端口
kubectl port-forward ...
Run Code Online (Sandbox Code Playgroud)
但为此我需要找出 pod 的名称,我运行命令
kubectl -n main_sp get pods
Run Code Online (Sandbox Code Playgroud)
获取列表:
NAME READY STATUS RESTARTS AGE
main-ms-hc-78469b74c-7lfdh 1/1 Running 0 13h
Run Code Online (Sandbox Code Playgroud)
我想
kubectl port-forward main-ms-hc-78469b74c-7lfdh 8080:80
Run Code Online (Sandbox Code Playgroud)
我得到
Error from server (NotFound): pods "main-ms-hc-78469b74c-7lfdh" not found
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想使用 kubectl cp 将文件从已完成的 pod 复制到我的本地主机(本地计算机)。我使用了kubectl cp /:/,但是,它给了我一个错误:无法在已完成的 pod 中执行到容器中;当前阶段是成功错误。有没有办法从已完成的 Pod 中复制文件?它不需要是 kubectl cp。任何帮助表示赞赏!
我试图调试一些安装问题,安装日志将我引导到以下路径/var/lib/kubelet/pods,即
/var/lib/kubelet/pods/f6affad1-941d-4df1-a0b7-38e3f2ab99d5/volumes/kubernetes.io~nfs/my-pv-e0dbe341a6fe475c9029fb372e
如何将根目录的guid映射pods到实际运行的pod或容器?
(f6affad1-941d-4df1-a0b7-38e3f2ab99d5在上面的例子中)
kubectl我没有看到与or返回的值有任何相关性crictl。
我的入口为:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mongoexpress-ingress
spec:
rules:
- host: mylocalmongoexpress.com
http:
paths:
- backend:
serviceName: mongoexpress-service
servicePort: 8081
Run Code Online (Sandbox Code Playgroud)
当我运行“kubectl apply -f mongoexpress-ingress.yaml”时,出现错误:
错误:验证“mongoexpress-ingress.yaml”时出错:验证数据时出错:[ValidationError(Ingress.spec.rules[0].http.paths[0].backend):io.k8s.api 中的未知字段“serviceName”。 networking.v1.IngressBackend,ValidationError(Ingress.spec.rules [0] .http.paths [0] .backend):io.k8s.api.networking.v1.IngressBackend中的未知字段“servicePort”,ValidationError(Ingress.spec .rules[0].http.paths[0]): io.k8s.api.networking.v1.HTTPIngressPath] 中缺少必填字段“pathType”;如果您选择忽略这些错误,请使用 --validate=false 关闭验证
浏览在线资源,我在 yaml 文件中找不到问题。
那么我在这里缺少什么?
我正在尝试自动化以下操作:
现在我可以将 cmd 作为 shell 命令运行,但我认为这不是正确的方法。我一直在阅读 Ansible 文档,但我没有看到我需要为此做什么。有没有更好的方法来应用这些 yaml 文件而不使用一系列 shell cmd?
提前致谢
我很乐意列出具有mongodb环境价值的部署及其阶段状态。有办法这样做吗?
使用此命令,我获得带有特定环境值的部署名称
kubectl get deploy -o=custom-columns="NAME:.metadata.name,SEC:.spec.template.spec.containers[*].env[*].value" | grep mongodb | cut -f 1 -d ' '
Run Code Online (Sandbox Code Playgroud)
输出:
app1
app2
app3
app4
Run Code Online (Sandbox Code Playgroud)
我想要得到的输出:
NAME READY UP-TO-DATE AVAILABLE AGE
app1 1/1 1 1 125d
app2 1/1 1 1 248d
app3 1/1 1 1 248d
app4 1/1 1 1 248d
Run Code Online (Sandbox Code Playgroud)
或者它也可以是 pod。我很感激你的帮助。
谢谢你!