在kubernetes中运行的容器
程序员文章站
2024-03-14 13:42:46
...
Pod
首先了解到容器之间彼此是完全隔离的,但是我们期待是隔离的容器组,而不是单个容器,每个容器组内共享一些资源,而不是全部。kubernetes通过配置Docker让一个pod内的所有容器共享相同的linux命名空间。
pod内运行的容器位于相同的Network命名空间中,因此它们共享相同的IP地址和端口空间,也就是说,在同一个pod内的两个容器的服务不能占用同一个端口。每个pod可以通过其它pod的IP地址来实现互相访问。
创建Pod
#版本
apiVersion: v1
#资源类型
kind: Pod
#pod元数据,关于pod的一些属性
metadata:
#pod名称
name: yfpod
#pod标签
labels:
creation_method: manual
ttag: test
env: prod
#pod的规格/内容
spec:
#节点选择器,可以指定的将pod部署到符合要求的节点
nodeSelector:
gpu: "true"
#容器
containers:
- name: yfpod
image: luksa/kubia
resources:
limits:
memory: "128Mi"
cpu: "500m"
#端口
ports:
- containerPort: 8080
protocol: TCP
这里知识介绍个别的标签含义,可以使用命令来获取标签含义
kubectl explain pods
kubectl explain pod.spec
创建pod
写完yaml文件之后,在终端中切换到该目录下。
kubectl create -f test.yaml
查看程序日志
k8s管理的最小单位是pod,但是pod中有多个容器,每个容器都有日志,我们查看容器中的日志。
查看pod的日志
kubectl logs podname
查看pod中某一个容器的日志
kubectl logs podname -c containername
标签
在k8s中标签是很重要的,标签是可以附加到资源的任意键值对,一个资源可以拥有多个标签。
我们可以在创建pod的时候指定标签,也可以在既有pod中增加或修改标签
在创建pod时添加标签
apiVersion: v1
kind: Pod
metadata:
name: yfpod
namespace: test
labels:#标签
name: yfpod
creation_method: manual
ttag: test
env: prod
spec:
nodeSelector:
gpu: "true"
containers:
- name: yfpod
image: luksa/kubia
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
protocol: TCP
增加标签
kubectl label po podname create_method=manual
修改标签
kubectl label po podname create_method=test --overwrite
在修改标签时添加–overwrite,将原有的标签覆盖
根据标签查找pod
#查找有指定标签的pod,这里create_method是键名
kubectl get pods -l create_method
#查找指定值的标签
kubectl get pods -l create_method=manual
#查找没有指定标签的pod
kubectl get pods -l '!create_method'
#查找标签在指定范围的
kubectl get pods -l create_method in (manual, other)
#查找标签不在指定范围的
kubectl get pods -l create_method notin (manual, other)
将特定的pod调度到符合预期的节点
在创建时调度
apiVersion: v1
kind: Pod
metadata:
name: yfpod
namespace: test
labels:
name: yfpod
creation_method: manual
ttag: test
env: prod
spec:
#节点选择器
nodeSelector:
gpu: "true"
containers:
- name: yfpod
image: luksa/kubia
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
protocol: TCP
命名空间
命名空间可以对资源进行分组。
创建命名空间
kubectl create namespace test
停止和移除pod
#根据podname移除
kubectl delete po podname
#根据标签删除
kubectl delete po -l create_method=manual
#删除整个命名空间
kubectl delete ns namespace
#删除所有pods
kubectl delete all --all
上一篇: 查看java对象在内存中的布局
下一篇: Pandas时间序列:频率和日期偏移量