持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
1、背景
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。Kubernetes没有提供单独运行Pod的命令,都是通过Pod控制器来实现的。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
2、操作
2.1、创建
# 命令格式: kubectl run (pod控制器名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
[root@master temp]# kubectl create deployment nginx --image=nginx:latest --port=80 --namespace dev deployment.apps/nginx created
2.2、查看
a.查看Pod基本信息
[root@master temp]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
nginx-8d545c96d-wnl8r 1/1 Running 0 4m8s
b.查看Pod详细信息
[root@master temp]# kubectl describe pod -n dev nginx-8d545c96d-wnl8r
Name: nginx-8d545c96d-wnl8r
Namespace: dev
Priority: 0
Node: node2/192.168.119.102
Start Time: Wed, 13 Apr 2022 11:50:35 +0800
Labels: app=nginx
pod-template-hash=8d545c96d
Annotations: <none>
Status: Running
IP: 192.168.2.10
IPs:
IP: 192.168.2.10
Controlled By: ReplicaSet/nginx-8d545c96d
Containers:
nginx:
Container ID: docker://3382ae08bb84cb0c856fab8878c71f1b4001204b90640513b2fde5f1bec2a572
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Wed, 13 Apr 2022 11:50:37 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-wnjt8 (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-wnjt8:
Type: Projected (a volume that contains injected data from multiple sources)
TokenExpirationSeconds: 3607
ConfigMapName: kube-root-ca.crt
ConfigMapOptional: <nil>
DownwardAPI: true
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m30s default-scheduler Successfully assigned dev/nginx-8d545c96d-wnl8r to node2
Normal Pulling 4m28s kubelet Pulling image "nginx:latest"
Normal Pulled 4m28s kubelet Successfully pulled image "nginx:latest" in 716.697962ms
Normal Created 4m28s kubelet Created container nginx
Normal Started 4m28s kubelet Started container nginx
2.3、访问
a.获取Pod的IP信息
[root@master temp]# kubectl get pod -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-8d545c96d-wnl8r 1/1 Running 0 5m17s 192.168.2.10 node2 <none> <none>
b.访问Pod链接
[root@master temp]# curl 192.168.2.8:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
2.4、删除pod
a.删除指定pod
[root@master temp]# kubectl delete -n dev pods nginx-8d545c96d-wnl8r
pod "nginx-8d545c96d-wnl8r" deleted
b.原pod被删除后再次查询,会发现系统又创建一个新的pod
NAME READY STATUS RESTARTS AGE
nginx-8d545c96d-nrfnn 1/1 Running 1 (37h ago) 45h
# ~这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建
# ~此时要想删除Pod,必须删除Pod控制器
c.先来查询一下当前namespace下的Pod控制器(deployment)
[root@master ~]# kubectl get deploy -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 45h
d.删除Pod控制器(deployment)
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
e.再次查询,pod也被删除了
[root@master ~]# kubectl get deploy -n dev
No resources found in dev namespace.
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.
2.5、配置
a.准备配置文件:pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
b.启动文件
[root@master temp]# kubectl apply -f pod-nginx.yaml
pod/nginx created
[root@master temp]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 5m49s
3、总结
以上就是今天关于pod的介绍了,感觉学习k8s一定要实际操作,需要动手的地方太多了。路漫漫其修远兮,吾将上下而求索。吾辈继续加油,明天见!