k8s 控制器(Replicaset 和 Deployment)

控制器:能够管理pod,监测pod运行状况,当pod发生故障,可以自动恢复pod,确保每一个pod资源始终处于定义或者期望的目标状态,一旦pod资源出现故障,那么控制器会尝试重启pod或者里面的容器,如果一直重启有问题的话那么它可能会基于某种策略来进行重新布派或者重新编排:如果pod副本数量低于用户所定义的目标数量,它也会自动补全;如果多余,也会自动终止pod资源;

kubectl 命令补全:

yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
点击查看代码
# kubectl explain replicaset/rs
# kubectl explain rs.spec.template.spec

[root@anyu967master1 k8s]# cat frontend.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: frontend     # 控制器名字
  labels:
    app: guestbook
    tier: frontend
spec:
  replicas: 2
  selector:
    matchLabels:       # 对应模板下的labels
      tier: frontend
  template:
    metadata:
      name: test      # 不重要
      labels:
        tier: frontend
    spec:
      containers:  # 对象列表
        - name: php-redis
          image: gcr.io/google_samples/gb-frontend:v5
          imagePullPolicy: IfNotPresent

[root@anyu967master1 k8s]# kubectl get pods
NAME             READY   STATUS    RESTARTS        AGE
frontend-6vd86   1/1     Running   0               9s
frontend-n46r9   1/1     Running   0               9s

[root@anyu967master1 k8s]# kubectl get rs
NAME       DESIRED   CURRENT   READY   AGE
frontend   2         2         2       102s
[root@anyu967master1 k8s]# kubectl edit rs frontend
[root@anyu967master1 k8s]# kubectl get pods -w

[root@anyu967master1 k8s]# kubectl get pods -o wide
NAME             READY   STATUS    RESTARTS        AGE   IP               NODE           NOMINATED NODE   READINESS GATES
demo-pod         1/1     Running   4 (6d19h ago)   10d   10.244.255.153   anyu967node2   <none>           <none>
frontend-6vd86   1/1     Running   0               10m   10.244.87.25     anyu967node1   <none>           <none>
frontend-n46r9   1/1     Running   0               10m   10.244.255.154   anyu967node2   <none>           <none>

总结:maxUnavailable:和期望的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑:maxSurge:和期望的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。

点击查看代码
# 声明式定义 通过Deployment对象,可以做到以下事情:
  # l、创建ReplicaSet和Pod
  # 2、滚动升级(不停止旧服务的状态下升级)和回滚应用(将应用回滚到之前的版本)
  # 3、平滑地扩容和缩容
  # 4、暂停和继续Deployment

# kubectl explain deployment
[root@anyu967master1 k8s]# cat myappDeployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-v1
spec:
  replicas: 2     # 定义副本数
  selector:
    matchLabels:
      app: myapp
      version: v1
  template:
    metadata:
      name: test
      labels:
        app: myapp
        version: v1
    spec:
      containers:
        - name: myapp
          image: janakiramm/myapp:v1
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              port: 80
          readinessProbe:
            httpGet:
              port: 80

[root@anyu967master1 k8s]# kubectl get pods -o wide
NAME                        READY   STATUS    RESTARTS        AGE     IP               NODE           NOMINATED NODE   READINESS GATES
myapp-v1-649f9b546c-4l42n   1/1     Running   0               2m9s    10.244.255.157   anyu967node2   <none>           <none>
myapp-v1-649f9b546c-m9ktb   1/1     Running   0               2m11s   10.244.87.28     anyu967node1   <none>           <none>

[root@anyu967master1 k8s]# kubectl describe pods myapp-v1-649f9b546c-4l42n
[root@anyu967node2 Package]# kubectl rollout --help
Manage the rollout of one or many resources.
Available Commands:
  history       View rollout history
  pause         Mark the provided resource as paused
  restart       Restart a resource
  resume        Resume a paused resource
  status        Show the status of the rollout
  undo          Undo a previous rollout
posted on 2023-04-20 00:13  anyu967  阅读(24)  评论(0)    收藏  举报