创建并运行
kubernetes没有提供单独运行Pod的命令,都是通过 Pod控制器 来实现的
命令格式
kubectl run 指定pod控制器名称 --image 指定Pod的镜像 --port 指定端口 --namespace 指定namespace
例子:
创建 test 命名空间
kubectl create ns test
查看是否有 test 命名空间
kubectl get ns
创建并运行 nginx pod:
kubectl run nginx --image=nginx:latest --port=80 --namespace test
提示:
kubectl run nginx中的 nginx:是控制器名称
执行结果如下:
deployment.apps/nginx created
查看pod信息
查看default命名空间下的pod
kubectl get pod
查看某命名空间下的pod
查看 test 命名空间下的 pod
kubectl get pod -n test
执行结果:
NAME READY STATUS RESTARTS AGE
nginx-dd6b5d745-9v86k 1/1 Running 0 27s
查看某命名空间下的pod更多信息
查看 test 命名空间下的 pod
kubectl get pod -n test -o wide
执行结果如下:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dd6b5d745-9v86k 1/1 Running 0 7m39s 10.244.1.7 node1 <none> <none>
解释:
- READY:
1/1表示有1个容器,该容器准备好了(根容器不算在内) - IP:pod的ip
- NODE:表示在哪个节点运行
查看Pod的详细信息
kubectl describe pod nginx-dd6b5d745-9v86k -n test
执行结果如下:
Name: nginx-dd6b5d745-9v86k # 名字
Namespace: test # 命名空间
Priority: 0
Node: node1/192.168.58.102 # 所在节点
Start Time: Sat, 30 Sep 2023 14:22:12 +0800 # 开始时间
Labels: pod-template-hash=dd6b5d745 # 标签
run=nginx
Annotations: <none>
Status: Running # 状态,正在运行
IP: 10.244.1.7 # pod ip地址
IPs:
IP: 10.244.1.7
Controlled By: ReplicaSet/nginx-dd6b5d745 # 控制器
Containers: # 容器,一个pod可以有多个容器
nginx: # nginx 容器
Container ID: docker://b00c1a9881ab70f2657ecca427129ab3ddd901f9496019940fcff2e99e60d572
Image: nginx:latest # 镜像名字、版本
Image ID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Port: 80/TCP # 端口
Host Port: 0/TCP
State: Running # 状态,正在运行
Started: Sat, 30 Sep 2023 14:22:14 +0800 # 开始时间,比上面pod开始时间晚了2秒
Ready: True
Restart Count: 0
Environment: <none>
Mounts: # 挂载点
/var/run/secrets/kubernetes.io/serviceaccount from default-token-x28p9 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-x28p9:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-x28p9
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events: # 事件,常用与排错
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 11m default-scheduler Successfully assigned test/nginx-dd6b5d745-9v86k to node1 # 调度到node1 节点执行该任务
Normal Pulling 11m kubelet, node1 Pulling image "nginx:latest" # 拉取镜像
Normal Pulled 11m kubelet, node1 Successfully pulled image "nginx:latest"
Normal Created 11m kubelet, node1 Created container nginx
Normal Started 11m kubelet, node1 Started container nginx
提示: Events 部分通常用于排错
删除指定的pod
直接删除pod(失败)
必须指定命名空间,否则从 default 命名空间中查找
提示:执行删除命令,时间较长
kubectl delete pod nginx-dd6b5d745-9v86k -n test
删除后,再次查看 test 空间下的pod
kubectl get pod -n test
执行结果如下:
NAME READY STATUS RESTARTS AGE
nginx-dd6b5d745-fr7pb 1/1 Running 0 27s
删除一个pod,会自动再次创建并运行一个pod
为什么不能直接删除pod(旧版本)
因为Pod是由 Pod控制器 创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建,这是 k8s 的优点
注意: 1.19 版本中可以直接删除
通过删除控制器删除pod
要想删除Pod,必须 删除 Pod控制器
查看控制器
查看test命名空间下的控制器:
kubectl get deploy -n test
显示如下:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 37m
删除控制器
kubectl delete deploy nginx -n test
再次查看pod
过几秒钟,再次执行下面命令:
kubectl get pod -n test
由于 pod控制器被删除了,所以 pod也就被删除了
删除所有pod
可通过删除 test 空间,实现删除所有的资源,如:pod、控制器
kubectl delete ns test
yaml 配置文件
可通过 yaml 配置文件,实现创建、删除
创建 pod-nginx.yaml 文件:
vim pod-nginx.yaml
按 i 键
复制粘贴下面内容:
apiVersion: v1
kind: Pod # 下面是 pod 配置
metadata:
name: nginx # pod 名称
namespace: test # test命名空间
spec:
containers: # 容器
- image: nginx:latest # 指名镜像是nginx最新版本
name: pod # 容器名称
ports:
- name: nginx-port
containerPort: 80 # 容器端口
protocol: TCP # 端口对应的协议
按 esc 键,:wq 保存退出
然后就可以执行对应的创建和删除命令了:
创建 pod
kubectl create -f pod-nginx.yaml
删除 pod
提示:根据yaml配置文件删除pod,可直接删除
kubectl delete -f pod-nginx.yaml