• 31、Pod控制器deployment Sky


    Pod控制器:
    ReplicationController(简称RC,已经淘汰)
    ReplicaSet
    Deployment
    DaemonSet
    Job
    Cronjob
    StatefulSet
    
    k8s名词解释:https://www.kubernetes.org.cn/deployment
    
    自主式POD:delete pod后不会被重新拉起的,不是由pod控制器控制和管理的pod
    deployment: 只能管控无状态应用
    
    1. Deployment概述
    
    Deployment对象,顾名思义,是用于部署应用的对象。它使Kubernetes中最常用的一个对象,它为ReplicaSet和Pod的创建提供了一种声明式的定义方法,从而无需像前两篇文章中那样手动创建ReplicaSet和Pod对象(使用Deployment而不直接创建ReplicaSet是因为Deployment对象拥有许多ReplicaSet没有的特性,例如滚动升级和回滚)
    
    deployment
    
    vi deployment-demo.yml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: myapp-deploy
        namespace: default
    spec:
        replicas: 2
        selector:
            matchLabels:
                app: myapp
                release: canary
        template:
            metadata:
               labels:
                app: myapp
                release: canary
            spec:
                containers:
                - name: myapp
                  image: ikubernetes/myapp:v1
                  ports:
                  - name: http
                    containerPort: 80
    
    # kubectl apply -f deployment-demo.yml 
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE
    myapp-deploy   2/2     2            2           2m4s
    
    # kubectl get pods
    NAME                            READY   STATUS             RESTARTS   AGE
    myapp-deploy-67b6dfcd8-wbflb    1/1     Running            0          2m27s
    myapp-deploy-67b6dfcd8-wdkxv    1/1     Running            0          2m27s
    
    # kubectl get rs
    NAME                      DESIRED   CURRENT   READY   AGE
    myapp-deploy-67b6dfcd8    2         2         2       3m49s
    
    若修改了deployment-demo.yml,直接再次apply就生效:
    # kubectl apply -f deployment.yaml
    
    修改pod的数量(扩容/缩容),patch打补丁的方法:
    # kubectl patch deployment myqpp-deploy -p '{"spec":{"replicas":3}}'
    
    版本升级:由vi升级到v2,直接修改yml文件或打补丁的方法
    # kubectl set image deployment myapp-deploy  myapp=ikubernetes/myapp:v2
    # kubectl rollout pause deploument myapp-deploy #暂停更新
    # kubectl rollout resume  deploument myapp-deploy #继续更新
    
    
    回滚:
    查看回滚的历史记录:
    # kubectl rollout history deployment myapp-deploy
    deployment.apps/myapp-deploy 
    
    REVISION  CHANGE-CAUSE
    
    1         <none>
    
    2         <none>
    3         <none>
    # kubectl rollout undo deployment myapp-deploy  #默认是回滚到上一版本
    # kubectl rollout undo deployment myapp-deploy --to-revision=3  #回滚到指定版本
    
    
    定义多个资源:
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
        name: redis
        namespace: default
    spec:
        replicas: 1
        selector:
            matchLabels:
                app: redis
                role: logstor
        template:
            metadata:
               labels:
                app: redis
                release: logstor
            spec:
                containers:
                - name: redis
                  image: redis:4.0-alpine
                  ports:
                  - name: redis
                    containerPort: 6379
    
    
    ################
    # kubectl describe deployment myapp-deploy
    Name:                   myapp-deploy
    Namespace:              default
    CreationTimestamp:      Sat, 06 Apr 2019 20:23:40 +0800
    Labels:                 <none>
    Annotations:            deployment.kubernetes.io/revision: 1
                            kubectl.kubernetes.io/last-applied-configuration:
                              {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"myapp-deploy","namespace":"default"},"spec":{"replicas":2...
    Selector:               app=myapp,release=canary
    Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
      Labels:  app=myapp
               release=canary
      Containers:
       myapp:
        Image:        ikubernetes/myapp:v1
        Port:         80/TCP
        Host Port:    0/TCP
        Environment:  <none>
        Mounts:       <none>
      Volumes:        <none>
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   myapp-deploy-67b6dfcd8 (2/2 replicas created)
    Events:
      Type    Reason             Age    From                   Message
      ----    ------             ----   ----                   -------
      Normal  ScalingReplicaSet  6m57s  deployment-controller  Scaled up replica set myapp-deploy-67b6dfcd8 to 2
    
    k8s探测:
      liveness 存活性探测
      readiness 服务就绪与否的探测
      lifecycle 
    
    # liveness 存活性探测
    # exec探针
    vi  pod-liveness-exec.yml
    apiVersion: v1
    
    kind: Pod
    
    metadata:
    
      name: liveness-exec-pod
    
      namespace: default
    
    spec:
    
      containers:
    
      - name: liveness-exec-contaienr
    
        image: busybox:latest
    
        imagePullPolicy: IfNotPresent
    
        command: ["/bin/sh","-c","touch /tmp/healthy","sleep 30","rm -f /tmp/healthy","sleep 3600"]
    
        livenessProbe:
    
          exec:
    
            command: ["test","e","/tmp/healthy"]
    
          initialDelaySeconds: 1
    
          periodSeconds: 3
    # kubectl create -f  pod-liveness-exec.yml
    
    # httpGet探针
    vi  pod-liveness-httpGet.yml
    apiVersion: v1
    
    kind: Pod
    
    metadata:
    
      name: liveness-httpget-pod
    
      namespace: default
    
    spec:
    
      containers:
    
      - name: liveness-httpget-container
    
        image: ikubernetes/myapp:v1
    
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
    
    
    
        livenessProbe:
    
          httpGet:
    
            port: http
            path: /index.html
    
          initialDelaySeconds: 1
    
          periodSeconds: 3
    # kubectl create -f  pod-liveness-httpget.yml
    
    
    readiness 服务就绪与否的探测
    vi  pod-readiness.yml
    apiVersion: v1
    
    kind: Pod
    
    metadata:
    
      name: readiness-httpget-pod
    
      namespace: default
    
    spec:
    
      containers:
    
      - name: readiness-httpget-container
    
        image: ikubernetes/myapp:v1
    
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
    
    
    
        readinessProbe:
    
          httpGet:
    
            port: http
            path: /index.html
    
          initialDelaySeconds: 1
    
          periodSeconds: 3
    # kubectl create -f pod-readiness.yml
  • 相关阅读:
    10天掌握webpack 4.0 Html 插件
    10天掌握webpack 4.0 服务篇
    spring boot 国际化信息
    Java 编程下使用 Class.forName() 加载类
    Java 编程下正则表达式判断字符串是否包含中文
    Adb connection Error:远程主机强迫关闭了一个现有的连接 解决方法
    Java 编程下简介 Class 与类加载
    通过htaccess文件配置多个一级域名指向根目录的子文件夹
    apache httpd.conf
    composer安装laravel框架时未生成Vendor解决办法
  • 原文地址:https://www.cnblogs.com/skyzy/p/16890984.html
Copyright © 2020-2023  润新知