5、Pod资源清单配置基础
资源对象配置格式
Kubernetes资源管理
Kubectl命令可分为三类
第一种
第二种
第三种
自定义Pod清单
使用帮助来查看配置清单指令
借助现有Pod创建yaml文件
手动编写Pod配置清单
日志的获取方式
问题
Kubernetes资源管理
Kubectl命令可分为三类
第一种
第二种
第三种
自定义Pod清单
使用帮助来查看配置清单指令
借助现有Pod创建yaml文件
手动编写Pod配置清单
日志的获取方式
问题
资源对象配置格式
我们使用kubectl来定义资源实际上来说在以后生产环境这种方式是很少使用的,它底层的逻辑也就是将我们使用的kubectl定义的资源形成配置清单提交给我们的API Server,这种方式很少使用,所以我们以后大多数使用的都是手动编辑配置清单,一个配置清单一般来讲都有五个一级字段分别是kind、apiVersion、spec、status、metadata;
kind:资源类别,如:Pod、namespace等;
apiVersion:使用的API版本;
metadata:源数据,它还可以有多个二级字段,比如label、name等;
spec:规范,它是用来定义用户所期望的状态的,我们期望这个控制器是什么样的,都在这个字段进行定义,也有多个二级字段;
status:用户无法手动定义,整个控制器或者说我们的Kubernetes服务组件来负责维护这个字段,因为这个字段是当前实际状态,用户期望状态需要用spec来定义,我们 的控制器会循环检查资源的实际状态,对于与用户定义的状态是否一样,如果不一样就需要做一些相关机制处理了,确保实际状态要和用户定义状态一致;
Kubernetes资源管理
Kubectl命令可分为三类
陈述式命令:就是使用kubectl create明确而具体的告诉API Server要创建的资源,如果我们创建Pod时候明确指明使用哪一个镜像;
陈述式对象配置:用户使用json格式或者yaml格式的具体而清晰的定义出一个资源所应该期望的状态,也可以使用我们的create命令;
声明式对象配置:用户使用json格式或者yaml格式的具体而清晰的定义出一个资源所应该期望的状态,这个时候就使用的不是create命令了,而是apply,一个命令可以实现增删改的所有操作,它还有一个好处,如果这个配置文件有问题的话,需要修改,改一下可以重新apply,但是create不行,如果一个目录下面有很多个配置清单,apply也可以直接把整个目录来进行配置;
第一种方式即是此前用到的run、expose、delete和get等命令,他们直接作用域Kubernetes系统上的活动对象,简单易用,但不支持代码复用,修改复审审计日志等功能,要想实现这些功能还需要依赖于资源配置文件来实现,这些文件也被称为资源清单;
第一种
[root@node1 ~]# kubectl create namespace cce
第二种
在编写配置清单的时候,类型的首字母必须大写;
[root@node1 ~]# mkdir -pv manifests/basic
[root@node1 basic]# cat develop-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: ccev2
spec:
[root@node1 basic]# kubectl create -f develop-namespace.yaml
namespace/ccev2 created
第三种
[root@node1 ~]# mkdir -pv manifests/basic
[root@node1 basic]# cat prop-namespace.yml
apiVersion: v1
kind: Namespace
metadata:
name: ccev2
spec:
[root@node1 basic]# kubectl apply -f prop-namespace.yml
namespace/ccev2 created
自定义Pod清单
Kubernetes配置说明文档地址:<a href="https://kubernetes.io/docs/reference/">https://kubernetes.io/docs/reference/</a>
使用帮助来查看配置清单指令
kubectl explain 资源类型
资源类型查看:kubectl api-resources
当查看到一个指令是一个Object的时候可以直接使用对象的方式进行下一级访问;
借助现有Pod创建yaml文件
选取一个现有的Pod,然后使用--export输出成yaml格式
[root@node1 ~]# kubectl get pod myweb-889fc5486-vmmtc -o yaml --export > pod-demo.yaml
创建一个namespace,并且将新Pod加入到这个namespace
[root@node1 ~]# kubectl create namespace cce
修改pod-demo.yaml
[root@node1 ~]# cat pod-demo.yaml
apiVersion: v1
kind: Pod
metadata:
name: web
namespace: cce
spec:
containers:
- image: nginx:1.14-alpine
imagePullPolicy: IfNotPresent
name: httpserver
[root@node1 ~]# kubectl apply -f pod-demo.yaml
手动编写Pod配置清单
[root@node1 ~]# cat cce.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-cce
namespace: cce
spec:
containers:
- image: nginx:1.14-alpine
name: nginx
imagePullPolicy: IfNotPresent
- image: busybox:latest
name: busybox
command:
- "/bin/sh"
- "-c"
- "sleep 10000"
[root@node1 ~]# kubectl apply -f cce.yaml
[root@node1 ~]# kubectl get pods -n cce
NAME READY STATUS RESTARTS AGE
pod-cce 2/2 Running 0 8m30s # Pod中的两个容器使用同一个网络名称空间
日志的获取方式
语法格式:kubectl logs -n namespace_name pod_name contaier_name [-f]
[root@node1 ~]# kubectl logs -n cce pod-cce nginx
问题
集群内部的Pod能否被外部主机访问?
NodePort、hostPort、hostNetwork