Kubernets 资源对象

资源:对象

  • workload

    • Pod
    • ReplicaSet
    • Deployment
    • StaticfulSet
    • DaemonSet
    • Job
    • Cronjob
  • 服务发现与负载均衡

    • Service
    • Ingress
  • 配置存储

    • Volume CSI
    • ConfigMap,
    • Secret
    • DownwandAPI
  • 集群资源

    • Namespace
    • Node Role
    • ClusterRole
    • RoleBinding
    • ClusterRoleBinding
  • 元数据型资源

    • HPA
    • PodTemplate
    • LimitRange

查看各资源yaml配置使用

kubectl explain pod  这里pod为资源类型 可以写其他资源 
kubectl explain pod.spec

1.POD

作为最小单位,由以下一级字段组成,具体说明请查看 http://www.jcwit.com/?p=493

  • apiVersion api版本此值必须在kubectl apiversion中
  • kind 指定资源类型 这里是Pod
  • metadata meta信息,比如名称、namespace、标签等信息
  • spec 包括一些container,storage,volume以及其他Kubernetes需要的参数,以及诸如是否在容器失败时重新启动容器的属性
  • status(由系统定义该字段)

2. ReplicaSet

控制pod的副本数量 由以下一级字段组成

  • apiVersion api版本此值必须在kubectl apiversion中
  • kind 指定资源类型 这里是ReplicaSet
  • metadata meta信息,比如名称、namespace、标签等信息
  • spec 需要指定以下字段
    • replicas 副本数量
    • selector选择器
    • template pod模板
  • selector标签选择器
    • 等值关系 = == !=
    • 集合关系
    • key in (value1, value2)
    • key not in (value,value2)
    • key
    • !key

许多资源支持内嵌字段定义标签选择器
matchLabels:直接给键值
matchExpressions: 基于给定表达式定义标签

[root@node1 ~]# cat nginx-rs.yaml 
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-rs
  namespace: default
  labels:
    web: nginx
spec:
  replicas: 2   #指定副本数量
  selector:
    matchLabels:   指定匹配标签
      app: nginx
  template:
    metadata:
       labels:     对应上面的selector标签
         app: nginx
    spec:               #下面是容器定义和pod.spec一样
      containers:
      - name: nginx
        image: daocloud.io/library/nginx
        imagePullPolicy: IfNotPresent 
        ports:
        - containerPort: 80

更新

[root@node1 ~]# kubectl set image rs nginx-rs nginx=daocloud.io/library/nginx:1.12
replicaset.extensions/nginx-rs image updated

通过挨个删除其中一个pod 然后让其重构 实现版本更新 (灰度发布)

3. Deployment 类似于rs

由以下字段组成

  • apiVersion:
  • kind 这里为Deployment
  • metadata meta信息,比如名称、namespace、标签等信息
  • spec需要指定以下字段
    • replicas 副本数量
    • selector选择器
    • template pod模板
[root@node1 ~]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
  labels:
     web: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
       app: nginx
  template:
    metadata:
       labels:
         app: nginx
    spec:
      containers:
      - name: nginx
        image: daocloud.io/library/nginx
        imagePullPolicy: IfNotPresent 
         ports:
         - containerPort: 80
kubectl apply -f nginx.yaml

更新 (蓝绿发布)

[root@node1 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-587ccff74 2 2 2 155m
[root@node1 ~]# kubectl set image deploy nginx-deployment nginx=daocloud.io/library/nginx:1.12
deployment.extensions/nginx-deployment image updated
[root@node1 ~]# kubectl get rs     #这里会产生两个rs,用来回滚
NAME DESIRED CURRENT READY AGE
nginx-deployment-587ccff74 0 0 0 157m
nginx-deployment-8d64b797d 2 2 1 9s

通过打补丁方式修改资源

[root@node1 ~]# kubectl patch deploy nginx-deployment -p '{"spec":{"replicas":5}}'
deployment.extensions/nginx-deployment patched

允许多一个pod

[root@node1 ~]# kubectl patch deployment nginx-deployment -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
deployment.extensions/nginx-deployment patched

实现金丝雀发布

执行暂停操作

[root@node1 ~]# kubectl set image deploy nginx-deployment nginx=daocloud.io/library/nginx:1.11 && kubectl rollout pause deploy nginx-deployment
deployment.extensions/nginx-deployment image updated
deployment.extensions/nginx-deployment paused

实时查看pod状态 发现多了一个pod 卡在了删除容器

[root@node1 ~]# kubectl get pods -w 
NAME READY STATUS RESTARTS AGE
nginx-deployment-79fbdccf57-sr4v6 0/1 ContainerCreating 0 20s
nginx-deployment-8d64b797d-8x8lh 1/1 Running 0 9m33s
nginx-deployment-8d64b797d-frwmw 1/1 Running 0 17m
nginx-deployment-8d64b797d-qtczc 1/1 Running 0 9m33s
nginx-deployment-8d64b797d-rsjl9 1/1 Running 0 9m33s
nginx-deployment-8d64b797d-xr5x6 1/1 Running 0 17m
nginx-deployment-79fbdccf57-sr4v6 1/1 Running 0 36s

确认没问题后执行以下操作关闭暂停

[root@node1 ~]# kubectl rollout resume deploy nginx-deployment
deployment.extensions/nginx-deployment resumed

查看更新状态

[root@node1 ~]# kubectl rollout status deploy nginx-deployment
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 5 new replicas have been updated...
Waiting for deployment spec update to be observed...
Waiting for deployment spec update to be observed...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 3 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 4 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 4 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 4 out of 5 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx-deployment" rollout to finish: 1 old replicas are pending termination...
deployment "nginx-deployment" successfully rolled out

4.DaemonSet

和Deployment 相似

kind: DaemonSet

没有replicas 会在每个node上运行一个pod,新加入的Node也同样会自动运行一个Pod

查看pod发现每个节点运行一个

[root@node1 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-dmmnb 1/1 Running 0 14s 10.254.60.3 192.168.57.14 <none> <none>
nginx-deployment-p88k7 1/1 Running 0 14s 10.254.60.2 192.168.57.15 <none> <none>

Kubernets 资源对象
http://www.jcwit.com/article/51/
作者
Carlos
发布于
2019年5月7日
许可协议