首先了解到容器之间彼此是完全隔离的,但是我们期待是隔离的容器组,而不是单个容器,每个容器组内共享一些资源,而不是全部。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



