欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在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