主机 | IP地址 | 服务 |
---|---|---|
master | 192.168.1.21 | k8s |
node01 | 192.168.1.22 | k8s |
node02 | 192.168.1.23 | k8s |
基于 https://blog.51cto.com/14320361/2464655 的实验继续进行
用来确保由其管控的Pod对象副本数量,能够满足用户期望,多则删除,少则通过模本创建
同样,它也可以通过yaml或json格式的资源清单来创建。其中spec字段一般嵌套以下字段:
与RC相比而言,RS不仅支持*基于等值*的标签选择器,而且还支持*基于集合*的标签选择器。
标签要做到:见名知意。
[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
如果标签有多个,标签选择器选择其中一个,也可以关联成功。相反,如果选择器有多个,那么标签必须完全满足条件,才可以关联成功。
基于等值关系的(equality-based):“=”,“==”,“! =”前面两个都是相等,最后一个是不等于。
基于集合关系(set-based):in、notin、exists三种。选择器列表间为“逻辑与”关系,使用ln或者NotIn操作时,其valuas不强制要求为非空的字符串列表,而使用Exists或DostNotExist时,其values必须为空
[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
。
1、RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),这对复杂的运维管理很方便。
2、升级方式
如果必须将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>标签选择器:标签的查询过滤条件。