1 常用命令

创建一个pod的yaml

apiVersion: v1
kind: Pod
metadata:
  name: kubia-manual
spec:
  containers:
  - image: luksa/kubia
  name: kubia
  ports:
  - containerPort: 8080
    protocol: TCP
# 从yaml中创建pod
kubectl create -f kubia-manual.yaml

# 指定名称空间
kubectl create -f kubia-manual.yaml -n custom-namespace

# 使用kubectl explain发现可能的api对象字段
kubectl explain pods
kubectl explain pod.spec

# 当启动不起来的时候,描述一下当前pod的信息
kubectl describe pod kubia-manual

#查看运行时pod的完整描述文件
kubectl get po kubia-manual -o yaml

# 查看所有的pod列表
kubectl get pods

# 查看pod日志(-c指定容器)
kubectl logs kubia-manual
kubectl logs kubia-manual -c kubia

# 将本地端口转发到pod中的端口
kubectl port-forward kubia-manual 8888:8080
curl localhost:8888

(1)本地端口转发图

Untitled

2 使用标签组织pod

标签是可以附加到资源的任意键值对,⽤以选择具有该确切标签的资源(通过标签选择器完成)

<aside> 💡 pod都标有两个标签

app,它指定pod属于哪个应⽤、组件或微服务。(基于应用的横向维度) rel,它显⽰在pod中运⾏的应⽤程序版本是stable、beta还是canary。(基于版本的纵向维度)

</aside>

apiVersion: v1
kind: Pod
metadata:
  name: kubia-manual-v2
  labels:
    creation_method: manual
    env: prod
spec:
  containers:
  - image: luksa/kubia
    name: kubia
    ports:
    - containerPort: 8080
      protocol: TCP
# 启动pod
kubectl create -f kubia-mannal-with-labels.yaml

# 展示标签(-L选项指定分别展示在自己的列中)
kubectl get po --show-labels
kubectl get po -L creation_method,env

# 修改标签
kubectl label po kubia-manual creation_method=mannual
kubectl label po kubia-manual-v2 env=debug --overwrite

2.1 标签选择器

<aside> 💡 包含(或不包含)使⽤特定键的标签 包含具有特定键和值的标签 包含具有特定键的标签,但其值与我们指定的不同

</aside>

# 根据k v筛选
kubectl get po -l creation_method=mannual

#根据key筛选
kubectl get po -l env

#筛选出不包含的
kubectl get po -l '!env'

# 组合使用标签
kubectl get po -l app=pc,rel=beta

2.2 使用标签和选择器约束pod的调度

# node添加标签
kubectl lable nade node名称 gpu = ture

# 选择器筛选标签
kubectl get nodes -l gpu=true

指定pod到特定的节点

apiVersion: v1
kind: Pod
metadata: 
  name: kubia-gpu
spec:
  nodeSelector:
    gpu: "true"
  containers:
  - name: kubia
    image: luksa/kubia

2.3 添加修改注解

# 查看注解
kubectl get po pod名 -o yaml

#添加注解
kubectl annotate pod pod名 注解key="注解值"

# 查看注解
kubectl describe pod pod名