3.1 Kubenetes Controller

Controller&workload 是干什么

  • controller又称为工作负载
  • 在集群上管理和和运行容器的对象
  • 确保pod副本的数量
  • 确保所有node运行一个pod
  • 一次性任务和定时任务

pod和controller的区别

Pod通过Controller实现应用的运维
通过label标签建立关系
Screenshot-2023-06-05-132532

deployment 应用场景

  • 部署无状态应用
  • 管理pod和ReplicaSet
  • 上线部署滚动升级
  • 一般用于web,微服务

yaml

  1. 创建初始yaml文件
    kubectl create deployment web3 --image=nginx --dry-run -o yaml >web3.yaml
    Screenshot-2023-06-05-151019

  2. 使用yaml文件
    kubectl apply -f web3.yml
    Screenshot-2023-06-05-151330

  3. check
    Screenshot-2023-06-05-151430

  4. expose port
    kubectl expose deployment web3 --port=80 --type=NodePort --target-port=9923 --name=expose_for_web3 -o yaml > expose_for_web3.yml

kind: Service
metadata:
  creationTimestamp: "2023-06-05T13:21:04Z"
  labels:
    app: web3
  name: exposeweb4
  namespace: default
  resourceVersion: "122125"
  uid: 9c6d3f73-0ce2-439e-bbf8-5de68f6f04b2
spec:
  clusterIP: 10.109.5.167
  clusterIPs:
  - 10.109.5.167
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - nodePort: 32453 #这是对外公开的port
    port: 80
    protocol: TCP
    targetPort: 80 #特别重要,如果nginx只能监听80端口,这里目标port必须是80.目标port就是container里自带的port
  selector:
    app: web3
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}
~                                 
kubectl apply -f web4.yml

Screenshot-2023-06-05-161004

升级回滚

  1. 修改deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web3
  name: web3
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web3
  strategy: {}
  template: #templat is the pod template
    metadata:
      creationTimestamp: null
      labels:
        app: web3
    spec:
      containers:
      - image: nginx:1.25 #这里修改就能做到 zero_down_time
        name: nginx
        resources: {}
status: {}

  1. kubectl apply -f web3_deployment.yml
    Screenshot-2023-06-05-162419
  2. check rollout status
    ``` kubectl rollout status deployment web3``
  3. 回滚
    kubectl rollout history deployment web3
    可以看到一共有5个版本
    Screenshot-2023-06-05-193638
  4. 回滚到上一个版本
    kubectl rollout undo deployment web3
  5. 回滚到指定版本
    kubectl rollout undo deplyment web3 --to-reversion=1
    Screenshot-2023-06-05-194210

弹性伸缩

kubectl scale deployment web3 --replicas=3