K8S(Kubernetes)是一款开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。在K8S中,Pod是最小的调度单位,可以理解为一组相关的容器集合。以下是关于K8S Pod管理与使用的一些内容:
创建Pod:
使用YAML或JSON文件来描述Pod的规格和配置。
在文件中指定容器镜像、资源限制、环境变量等信息。
通过kubectl命令行工具执行kubectl create -f <文件名>创建Pod。
管理Pod:
使用kubectl命令行工具可以对Pod进行管理,例如查看、编辑、删除等操作。
使用kubectl get pods命令可以获取当前集群中的所有Pod。
使用kubectl describe pod <pod名称>命令可以查看指定Pod的详细信息。
使用kubectl delete pod <pod名称>命令可以删除指定的Pod。
多容器Pod:
一个Pod可以包含多个容器,这些容器共享相同的网络命名空间和存储卷。
多容器Pod适用于需要共享本地资源或实现紧密耦合的应用场景。
各个容器之间可以通过localhost或者共享的存储卷进行通信和数据交互。
资源管理:
可以通过在Pod的描述文件中设置资源请求和限制来管理Pod使用的计算资源(CPU、内存等)。
资源请求用于调度决策,资源限制用于容器运行时的控制和限制。
K8S会根据节点上的资源情况进行合理的调度,以保证各个Pod的资源需求被满足。
健康检查与重启:
K8S支持对Pod进行健康检查,以确保容器应用的可用性。
可以通过在Pod描述文件中定义探测器来配置健康检查,常见的有存活探测和就绪探测。
如果某个容器失败或不响应健康检查,K8S会自动重新启动该容器。
总之,Kubernetes提供了强大的Pod管理能力,允许用户创建、扩展和管理容器化应用程序。通过合理配置Pod的规格和资源,可以实现高效的容器编排和资源利用。
一:创建一个pod
1.通过yaml配置文件去创建一个pod
[root@k8s-master1 POD]# cat mypod.yaml
kind: Pod
apiVersion: v1
metadata:
name: mypod
namespace: app
spec:
containers:
- name: mypod
image: busybox
args:
- /bin/sh
- -c
- sleep 3h
#kubectl apply -f 指定配置文件去执行
[root@k8s-master1 POD]# kubectl apply -f mypod.yaml
pod/mypod created
[root@k8s-master1 POD]# kubectl get pods -n app -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mypod 1/1 Running 0 35s 10.10.135.217 k8s-master3 <none> <none>
#查看pod的详细信息 kubectl describe pods +name
[root@k8s-master1 POD]# kubectl describe pods mypod -n app
Name: mypod
Namespace: app
Priority: 0
Node: k8s-master3/192.168.21.122
Start Time: Wed, 29 Nov 2023 21:33:21 +0800
Labels: <none>
Annotations: cni.projectcalico.org/containerID: fb0bdff8d1a50964fe035ba611ddb27f71bbe1238c77514918a611b2babb6877
cni.projectcalico.org/podIP: 10.10.135.217/32
cni.projectcalico.org/podIPs: 10.10.135.217/32
Status: Running
IP: 10.10.135.217
IPs:
IP: 10.10.135.217
Containers:
mypod:
Container ID: docker://3efc4d81429047afe769e3f942e557d1026bb5ae58f89efd464d6a1719c7d2dc
Image: busybox
Image ID: docker-pullable://busybox@sha256:5acba83a746c7608ed544dc1533b87c737a0b0fb730301639a0179f9344b1678
Port: <none>
Host Port: <none>
Args:
/bin/sh
-c
sleep 3h
State: Running
Started: Wed, 29 Nov 2023 21:33:25 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ncwwh (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
kube-api-access-ncwwh:
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 6m1s default-scheduler Successfully assigned app/mypod to k8s-master3
Normal Pulling 6m kubelet Pulling image "busybox"
Normal Pulled 5m57s kubelet Successfully pulled image "busybox" in 3.076013328s
Normal Created 5m57s kubelet Created container mypod
Normal Started 5m57s kubelet Started container mypod
#kubectl exec -it pods+name -- /bin/sh 进入容器
[root@k8s-master1 POD]# kubectl exec -it mypod -n app -- /bin/sh
/ #
#kubectl delete pods 删除容器
[root@k8s-master1 POD]# kubectl delete pods mypod -n app
pod "mypod" deleted