官网
:https://kubernetes.io/docs/concepts/workloads/controllers/
控制器的作用是用来统一发布Pod的对象,通过yaml文件定义。运行后可以进行查看,变更,删除。
分为三种:
官网
:https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/A ReplicationController ensures that a specified number of pod replicas are running at any one time. In other words, a ReplicationController makes sure that a pod or a homogeneous set of pods is always up and available.
ReplicationController定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,所以RC的定义包含以下几个部分:
也就是说通过RC实现了集群中Pod的高可用,减少了传统IT环境中手工运维的工作。
Have a try
kind:表示要新建对象的类型
spec.selector:表示需要管理的Pod的label,这里表示包含app: nginx的label的Pod都会被该RC管理
spec.replicas:表示受此RC管理的Pod需要运行的副本数
spec.template:表示用于定义Pod的模板,比如Pod名称、拥有的label以及Pod中运行的应用等
通过改变RC里Pod模板中的镜像版本,可以实现Pod的升级功能
kubectl apply -f nginx-pod.yaml,此时k8s会在所有可用的Node上,创建3个Pod,并且每个Pod都有一个app: nginx的label,同时每个Pod中都运行了一个nginx容器。
如果某个Pod发生问题,Controller Manager能够及时发现,然后根据RC的定义,创建一个新的Pod
扩缩容:kubectl scale rc nginx --replicas=5
(1)创建名为nginx_replication.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
(2)根据nginx_replication.yaml创建pod
kubectl apply -f nginx_replication.yaml
(3)查看pod
kubectl get pods -o wide
NAME READY STATUS
nginx-hksg8 1/1 Running 0 44s 192.168.80.195 w2
nginx-q7bw5 1/1 Running 0 44s 192.168.190.67 w1
nginx-zzwzl 1/1 Running 0 44s 192.168.190.68 w1
kubectl get rc
NAME DESIRED CURRENT READY AGE
nginx 3 3 3 2m54s
(4)尝试删除一个pod
kubectl delete pods nginx-zzwzl
kubectl get pods
(5)对pod进行扩缩容
kubectl scale rc nginx --replicas=5
kubectl get pods
nginx-8fctt 0/1 ContainerCreating 0 2s
nginx-9pgwk 0/1 ContainerCreating 0 2s
nginx-hksg8 1/1 Running 0 6m50s
nginx-q7bw5 1/1 Running 0 6m50s
nginx-wzqkf 1/1 Running 0 99s
(6)删除pod
kubectl delete -f nginx_replication.yaml
或者
kubectl delete ReplicationController nginx
官网
:https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/A ReplicaSet’s purpose is to maintain a stable set of replica Pods running at any given time. As such, it is often used to guarantee the availability of a specified number of identical Pods.
在Kubernetes v1.2时,RC就升级成了另外一个概念:Replica Set,官方解释为“下一代RC”
ReplicaSet和RC没有本质的区别,kubectl中绝大部分作用于RC的命令同样适用于RS
RS与RC唯一的区别是:RS支持基于集合的Label Selector(Set-based selector),而RC只支持基于等式的Label Selector(equality-based selector),这使得Replica Set的功能更强
尝试一下
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
# modify replicas according to your case
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
注意
:一般情况下,我们很少单独使用Replica Set,它主要是被Deployment这个更高的资源对象所使用,从而形成一整套Pod创建、删除、更新的编排机制。当我们使用Deployment时,无须关心它是如何创建和维护Replica Set的,这一切都是自动发生的。同时,无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)。
官网
:https://kubernetes.io/docs/concepts/workloads/controllers/deployment/A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment, and the Deployment Controller changes the actual state to the desired state at a controlled rate. You can define Deployments to create new ReplicaSets, or to remove existing Deployments and adopt all their resources with new Deployments.
Deployment相对RC最大的一个升级就是我们可以随时知道当前Pod“部署”的进度。
创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程
检查Deploymnet的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值)
(1)创建nginx_deployment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
(2)根据nginx_deployment.yaml文件创建pod
kubectl apply -f nginx_deployment.yaml
(3)查看pod
kubectl get pods -o wide
kubectl get deployment
kubectl get rs
kubectl get deployment -o wide
nginx-deployment-6dd86d77d-f7dxb 1/1 Running 0 22s 192.168.80.198 w2
nginx-deployment-6dd86d77d-npqxj 1/1 Running 0 22s 192.168.190.71 w1
nginx-deployment-6dd86d77d-swt25 1/1 Running 0 22s 192.168.190.70 w1
nginx-deployment[deployment]-6dd86d77d[replicaset]-f7dxb[pod]
(4)当前nginx的版本
kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 3m27s nginx nginx:1.7.9 app=nginx
(5)更新nginx的image版本
kubectl set image deployment nginx-deployment nginx=nginx:1.9.1
(6)删除nginx-deployment
kubectl delete deployment nginx-deployment