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/