基于yaml文件运行pod

文章介绍了如何通过编写yaml文件来在Kubernetes集群中创建一个运行Tomcat应用的Pod,包括设置apiVersion、kind、metadata、spec等关键字段,并展示了使用kubectl命令进行创建、查询、管理Pod的操作过程。

通过资源清单文件创建第一个Pod

上一篇用yaml文件创建了nginx,那这次就创Tomact吧

[root@k8s-master1 pod-yaml]# vim pod-tomcat.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: tomcat-test
  namespace: default
  labels:
    app: tomcat
spec:
  containers:
  - name: tomcat-java
    image: tomcat:10.1.7
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
[root@k8s-master1 pod-yaml]# kubectl apply -f pod-tomcat.yaml 
pod/tomcat-test created
[root@k8s-master1 pod-yaml]# kubectl get pods
NAME                          READY   STATUS              RESTARTS   AGE
nginx-test-78dc6966dd-x7ktk   1/1     Running             0          69m
nginx-test-78dc6966dd-xxkvp   1/1     Running             0          71m
tomcat-test                   0/1     ContainerCreating   0          5s

yaml文件解释

apiVersion: v1                        #pod资源版本
kind: Pod                             #定义的资源类型
metadata:                             #定义元数据
  name: tomcat-test                   #pod名称
  namespace: default                  #定义pod命名空间
  labels:                             #定义pod标签
    app: tomcat
spec:                                 #从spec一下是定义容器的
  containers:                         #容器
  - name: tomcat-java                 #容器名称
    image: tomcat:10.1.7              #容器镜像
    imagePullPolicy: IfNotPresent     #镜像下载策略
    ports:                            #暴露的端口号
    - containerPort: 8080

Pod常用命令

#更新资源清单
[root@k8s-master1 pod-yaml]# kubectl apply -f pod-tomcat.yaml 

#查看Pod是否创建成功
[root@k8s-master1 pod-yaml]# kubectl get pods -A
或者
[root@k8s-master1 pod-yaml]# kubectl get pods -l app=tomcat
NAME          READY   STATUS    RESTARTS   AGE
tomcat-test   1/1     Running   0          157m

-l 表示按标签筛选 app=tomcat是筛选内容

#查看pod的ip和pod调度到哪个节点上
[root@k8s-master1 pod-yaml]# kubectl get pods -owide

#查看pod日志
[root@k8s-master1 pod-yaml]# kubectl logs tomcat-test (tomcat-test是pod名称)

#进入到创建的pod
[root@k8s-master1 pod-yaml]# kubectl exec -it tomcat-test /bin/bash

#假如pod里有多个容器,进入到pod里的指定容器,-c 指定容器
[root@k8s-master1 pod-yaml]# kubectl exec -it tomcat-test -c tomcat-java /bin/bash

#查看k8s集群中的名称空间
[root@k8s-master1 pod-yaml]# kubectl get namespaces

#查看pod详细信息,当启动一个pod没起来的时候可以用这个命令排查问题
[root@k8s-master1 pod-yaml]# kubectl describe pods tomcat-test 

#查看pod具有哪些标签
[root@k8s-master1 pod-yaml]# kubectl get pods --show-labels

#删除pod
[root@k8s-master1 pod-yaml]# kubectl delete -f pod-tomcat.yaml 
或者
[root@k8s-master1 pod-yaml]# kubectl delete pods nginx-test

通过 kubectl run 命令行创建pod(不使用yaml文件)

[root@k8s-master1 pod-yaml]# kubectl run tomcat --image=tomcat:10.1.7 --image-pull-policy='IfNotPresent' --port=8080
pod/tomcat created

[root@k8s-master1 pod-yaml]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
nginx-test-78dc6966dd-rshdh   1/1     Running   0          2m53s
nginx-test-78dc6966dd-xxkvp   1/1     Running   0          4h
tomcat                        1/1     Running   0          9s

Kubernetes 中,删除通过 YAML 文件创建的 Pod 可以使用 `kubectl delete` 命令。以下是具体的操作方式: ### 使用 kubectl delete 删除 Pod一个 Pod 是通过 YAML 文件定义并创建时,可以直接通过文件路径或者资源名称来执行删除操作。 #### 方法一:基于 YAML 文件路径删除 如果仍然保留用于创建 PodYAML 文件,则可以通过以下命令删除该 Pod: ```bash kubectl delete -f <path_to_yaml_file> ``` 例如,假设 YAML 文件名为 `pod-toleration.yaml` 并位于当前目录下,则可以运行以下命令: ```bash kubectl delete -f pod-toleration.yaml ``` 此命令会读取 YAML 文件中的配置,并定位到对应的 Pod 进行删除[^1]。 #### 方法二:基于 Pod 名称删除 如果知道要删除的 Pod 的名称,也可以直接通过其名称进行删除。例如,对于名为 `nginx-demo` 的 Pod,可运行以下命令: ```bash kubectl delete pod <pod_name> ``` 例如: ```bash kubectl delete pod nginx-demo ``` 这将删除指定名称的 Pod 实例[^4]。 --- ### 需要注意的情况 有时,Pod 不是由手动创建的,而是由更高层次的对象(如 ReplicaSet 或 ReplicationController)管理。在这种情况下,即使删除了单个 PodKubernetes 控制器也会自动重新创建它。为了彻底停止这些 Pod 的存在,需要删除它们所属的控制器对象。 #### 检查 Pod 是否受控制器管理 可以通过查看 Pod 描述信息确认是否存在关联的控制器: ```bash kubectl describe pod <pod_name> ``` 如果发现字段 `Controlled By:` 显示了一个 ReplicaSet 或其他控制器的名字,则说明该 Pod 是被动态管理的。 #### 删除控制器对象 如果是这种情况,应该删除相应的控制器而不是单独的 Pod。例如,删除 ReplicaSet 对象可通过以下命令完成: ```bash kubectl delete rs <replicaset_name> ``` 或者,如果涉及 Deployment,则应删除整个 Deployment: ```bash kubectl delete deployment <deployment_name> ``` 只有这样才可以完全阻止新 Pod 的再次生成[^2]。 --- ### 示例代码片段 下面是一个完整的例子展示如何删除特定命名空间下的某个 Pod: ```bash # 创建测试用 Pod (仅作为演示用途) kubectl run demo-pod --image=nginx -n dev # 列出所有 Pods 来验证已成功创建 kubectl get pods -n dev # 删除刚才创建的那个 Pod kubectl delete pod demo-pod -n dev ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值