TOC

资源对象配置格式

    我们使用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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注