主机 | IP地址 | 服务 |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基于[ http://www.javashuo.com/article/p-wzdhboob-dy.html]() 的实验继续进行前端
用来确保由其管控的Pod对象副本数量,可以知足用户指望,多则删除,少则经过模本建立node
一样,它也能够经过yaml或json格式的资源清单来建立。其中spec字段通常嵌套如下字段:nginx
与RC相比而言,RS不只支持基于等值的标签选择器,并且还支持基于集合的标签选择器。web
标签要作到:见名知意。json
[root@master ~]# vim label.yaml kind: Pod apiVersion: v1 metadata: name: labels labels: env: qa tier: frontend spec: containers: - name: myapp image: httpd
[root@master ~]# kubectl apply -f label.yaml --record
[root@master ~]# kubectl get pod --show-labels //经过--show-labels显示资源对象的
[root@master ~]# kubectl get po -L env,tier //显示某个键对应的值
[root@master ~]# kubectl get po -l env,tier //经过-l 查看仅包含某个标签的资源。
[root@master ~]# kubectl label pod labels app=pc //给pod资源添加标签
[root@master ~]# kubectl label pod labels env=dev --overwrite //修改标签
[root@master ~]# kubectl get pod -l tier --show-labels //查看标签
[root@master ~]# vim service.yaml kind: Service apiVersion: v1 metadata: name: service spec: type: NodePort selector: env: qa ports: - protocol: TCP port: 90 targetPort: 80 nodePort: 30123
[root@master ~]# kubectl apply -f service.yaml
[root@master ~]# kubectl describe svc
[root@master ~]# curl 127.0.0.1:30123
若是标签有多个,标签选择器选择其中一个,也能够关联成功。相反,若是选择器有多个,那么标签必须彻底知足条件,才能够关联成功。vim
[基于等值关系的(equality-based)]():“=”,“==”,“! =”前面两个都是相等,最后一个是不等于。后端
[基于集合关系(set-based)]():in、notin、exists三种。选择器列表间为“逻辑与”关系,使用ln或者NotIn操做时,其valuas不强制要求为非空的字符串列表,而使用Exists或DostNotExist时,其values必须为空api
[root@master ~]# vim selector.yaml selector: matchLabels: app: nginx mathExpressions: - {key: name,operator: In,values: [zhangsan,lisi]} - {key: age,operator: Exists,values:}
它也是一种pod控制器。缓存
RC,RS , deployment , daemonset.都是pod控制器。statfukSet,RBAC架构
若是必须将pod运行在固定的某个或某几个节点,且要优先于其余的pod的启动。一般状况下,默认会将每个节点都运行,而且只能运行一个pod。这种状况推荐使用DeamonSet资源对象。
[root@master ~]# kubectl get ds -n kube-system //查看一下DaemonSet
[root@master ~]# vim daemonset.yaml kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: test-ds spec: template: metadata: labels: name: test-ds spec: containers: - name: test-ds image: httpd
[root@master ~]# kubectl apply -f daemonset.yaml
[root@master ~]# kubectl get ds
Replication Controller
简称RC
,RC
是Kubernetes
系统中的核心概念之一,简单来讲,RC
能够保证在任意时间运行Pod
的副本数量,可以保证Pod
老是可用的。若是实际Pod
数量比指定的多那就结束掉多余的,若是实际数量比指定的少就新启动一些Pod
,当Pod
失败、被删除或者挂掉后,RC
都会去自动建立新的Pod
来保证副本数量,因此即便只有一个Pod
,咱们也应该使用RC
来管理咱们的Pod
。
被认为 是“升级版”的RC。RS也是用于保证与label selector匹配的pod数量维持在指望状态。
实际上
RS
和RC
的功能基本一致,目前惟一的一个区别就是RC
只支持基于等式的selector
(env=dev或app=nginx),但RS
还支持基于集合的selector
(version in (v1, v2)),这对复杂的运维管理就很是方便了。
kubectl
命令行工具中关于RC
的大部分命令一样适用于咱们的RS
资源对象。不过咱们也不多会去单独使用RS
,它主要被Deployment
这个更加高层的资源对象使用,除非用户须要自定义升级功能或根本不须要升级Pod
,在通常状况下,咱们推荐使用Deployment
而不直接使用Replica Set
。
一、RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),这对复杂的运维管理很方便。
二、升级方式
若是必须将pod运行在固定的某个或某几个节点,且要优先于其余的pod的启动。一般状况下,默认会将每个节点都运行,而且只能运行一个pod。这种状况推荐使用DeamonSet资源对象。
一个DaemonSet对象能确保其建立的Pod在集群中的每一台(或指定)Node上都运行一个副本。若是集群中动态加入了新的Node,DaemonSet中的Pod也会被添加在新加入Node上运行。删除一个DaemonSet也会级联删除全部其建立的Pod。
Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您能够在Deployment对象中只描述您所指望的理想状态(预期的运行状态),Deployment控制器为您将如今的实际状态转换成您指望的状态,例如,您想将全部的webapp:v1.0.9升级成webapp:v1.1.0,您只需建立一个Deployment,Kubernetes会按照Deployment自动进行升级。如今,您能够经过Deployment来建立新的资源(pod,rs,rc),替换已经存在的资源等。
你只须要在Deployment中描述你想要的目标状态是什么,Deployment controller就会帮你将Pod和Replica Set的实际状态改变到你的目标状态。你能够定义一个全新的Deployment,也能够建立一个新的替换旧的Deployment。
Deployment集成了上线部署、滚动升级、建立副本、暂停上线任务,恢复上线任务,回滚到之前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment能够帮咱们实现无人值守的上线,大大下降咱们的上线过程的复杂沟通、操做风险。
[root@master ~]# vim daemonset.yaml kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: xgp-ds spec: template: metadata: labels: tier: backend env: dev spec: containers: - name: xgp-ds image: httpd
[root@master ~]# kubectl get pod --show-labels
[root@master ~]# kubectl get pod -L env,tier
[root@master ~]# vim service.yaml kind: Service apiVersion: v1 metadata: name: service spec: type: NodePort selector: env: dev ports: - protocol: TCP port: 90 targetPort: 80 nodePort: 30123
[root@master ~]# kubectl apply -f service.yaml
[root@master ~]# kubectl describe svc
[root@master ~]# curl 127.0.0.1:30123
<1>标签:解决同类型的资源对象,为了更好的管理,按照标签分组。
<2>标签选择器:标签的查询过滤条件。