Replication Controller
- Replication Controller is a Kubernetes Controller
- Runs multiple instances of kubernetes pods in a cluster thus providing high availability
- Replication Controller and Replica Set have same functionality but they are different
- Replication Controller is the older way to scale the pods
- Selector labels is optional, if you dont specify then ".spec.template.metadata.labels" is defaulted
Replica Set
- Replica Set is also Kubernetes Controller
- Replica Set are for having the desired number of Pods running, same as Replication Controller
- Kubernetes keeps a watch of the number of pods that should be running at any time and automatically creates/deletes based on the pods running
- What differentiates a Replica Set from Replication Controller is selector with set-based label requirements.
- Set based allow filtering keys according to a set of values.
- Three kinds of operators are supported:
- in
- notin
- exists
Updating Replica Set
- Use kubectl edit rs <rs-name> and modify the replica set
- After this delete all the pods, so that the replica set creates new pods based on the updated definition file
- Note that the replica set does not propagate the updated changes into pods definition files
- If we use kubectl edit pod <pod-name>, changes are reflected in Pod immediately
- Similarly the changes for replicaSet are reflected in the definition file but not in the underlying resources created by the replicaSet, so if you update the number of replicas then the changes are instantaneously updated
- Alternatively delete the replicaSet and re-create it with updated configuration
- Deleting a replica-set automatically deletes the pod underlying it. So new pods are created when replicaSet is created
Scale the Replica Set
- Use kubectl edit rs <rs-name> and modify the replica set
- Changes in the file will be immediately reflected, this is because replica set now looks at the new number of replicas to be maintained
- So it will add or delete the pods automatically
- Alternatively use kubectl scale --replicas=<no-of-replicas> replicaset <replica-set-name>
replication-controller-definition.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myapp-rc
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
kubectl create -f replication-controller-definition.yaml
kubectl get replicationcontroller
replica-set-definition.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myapp-rs
labels:
app: myapp
type: front-end
spec:
template:
metadata:
name: myapp-pod
labels:
app: myapp
type: front-end
spec:
containers:
- name: nginx-container
image: nginx
replicas: 3
selector:
matchLabels:
type: front-end
kubectl create -f replica-set-definition.yaml
kubectl get replicaset
kubectl delete replicaset myapp-rs
-> Deletes the underlying pods as well
kubectl replace -f replica-set-definition.yaml
-> Manually update the yaml definition file and run the REPLACE command
kubectl scale --replicas=6 -f replica-set-definition.yaml
-> Using file name to update the replica set will not update the YAML efinition file
kubectl scale --replicas=6 replicaset myapp-rs
selector:
matchExpressions:
- {key: tier, operator: In, values: [frontend1]}
Comments
Post a Comment