k8s资源对象以及yaml配置清单

k8s有五种工作负载资源控制器:

1. Pod:自主式Pod,不受控制器控制,失败了,不会被自动修复。

2. ReplicaSet:支持扩缩容、自动恢复达到期望的副本数、标签选择器。帮用户管理无状态的服务。

3. Deployment:工作在ReplicaSet之上,还支持滚动更新、声明式定义(动态修改配置),pod数量可以大于node数量,无状态,关注群体稳定。

4. StatefulSet:有状态pod,关注个体稳定。

5. DaemonSet:用于确保集群中的每一个节点(或者只在部分节点)只运行一个pod,如系统级的后台用户,logstash等。

6. Job:执行完任务就退出,不需要一直运行;如果任务没有完成就crash还是会恢复,直到任务完成。

服务发现及服务均衡资源: Service, Ingress

配置与存储: Volume, CSI, configMap(配置), Secret(存储敏感信息)

大部分资源配置清单都由五个关键字组成

apiVersion :   表示属于哪一个群组及其版本,如果没有指定群组(apiVersion: v1)怎表面是core群组(基本组件群组)

                   kubectl api-versions这个命令可以显示出当前支持的apiVersioin示例

kind:     资源类别,用来标记你打算创建一个怎么样的资源,Pod, ReplicaSet, Deployment..Service, Ingress...

metadata: 元数据

        name:

        namespace:

        labels: 每一个资源的标签

       annotations: 资源注解

       uid: 唯一标志

       每个资源的引用路径: /api/GROUP/VERSION/namespace/NAMESPACE/TYPE/NAME, 可以用curl去获取

spec:   用户预期达到的目标状态描述   

status:当前状态,此状态会无限与spec靠近, 此字段k8s维护,用户只能读取,不能修改。

以上每一个关键字都可以通过 kubectl explain xx来获取详细信息,如 kubectl explain pod  

当我想知道pod的metadata怎么定义时,可以 kubectl explain pod.metada , 想知道spec下面的container怎么定义时: kubectl explain pod.spec.containers

第一个yaml资源配置清单

vim first-demo.yaml

apiVersion: v1
kind: Pod      #Pod类型
metadata:
  name: pod-demo
  namespace: default
  labels:      #这个通过kubectl explain pods.metadata.labels得知它是<map[string]string>类型的,则需要写成如下,也可以写成

                  #{app:myapp, tier: frontend}
    app: myapp
    tier: frontend

spec: #kubectl explain pods.spec输出中可以看到 containers 后面有一个containers   <[]Object> -required- 说明containers是必             

#须 有的, <[]Object> 说明它是一个列表的则需要以如下方式定义,- 开头

   containers: ## kubectl explain pods.spec.containers可以

   - name: myapp

      image: ikubernetes/myapp:v1

  - name: busybox

     image: busybox:latest

     command:  #["/bin/sh", "-c", "sleep 3600"], 因为 command      <[]string>又是列表类型的,所以它有两种定义方式

     - "/bin/sh"

     - "-c"

    - "echo ${date} >> /usr/share/nginx/html/index.html; sleep 5"

写好,保存退出。

[root@master manifests]# pwd
/root/manifests
[root@master manifests]# ls
pod-demo.yaml
然后: 

[root@master manifests]# kubectl create -f pod-demo.yaml   #根据资源配置清单生成pod
pod/pod-demo created
[root@master manifests]# kubectl get pods  #查看pod状态
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   2/2     Running   0          19s
[root@master manifests]# kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
pod-demo   1/2     Running   1          32s
[root@master manifests]#

查看生成后的pod描述:详细显示了pod的信息, describe pods,这里先指定pods类型,再指定名称

[root@master manifests]# kubectl describe pods pod-demo
。。。

使用 kubectl logs pod-demo myapp,可查看pod内部容器日志

 kubectl delete pods pod-demo 可以删除pod, 也可以通过yaml文件删除:  kubectl delete -f pod-demo.yaml

kubectl get pods -w 可以监控pod状态

kubectl exec -it pod-demo -c myapp -- /bin/sh 可以进入到容器里面

注意: 同一个pod中运行多个container时,它们的文件系统也是隔离的,除非我们让它们挂载到同一个数据卷中。

 

标签:

许多资源支持内嵌字段定义其使用的标签选择器:

   matchLabels: 直接给定键值

   matchExpressions: 基于给定的表达式来定义使用标签选择器,{key:"KEY", operator:"OPERATOR",values:[V1, V2...]}

      操作符:In,NotIn: values字段的值必须为非空列表;

                    Exists, NotExists: values字段的值必须为空列表

nodeSelector <map[string]string>

    节点标签选择器

nodeName <string>

annotations: 与label不同的地方在于, 它不能用于挑选资源对象,仅用于为对象提供“元数据”。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章