设为首页 收藏本站
查看: 1431|回复: 0

[资源发布] k8s 滚动升级及回滚

[复制链接]
累计签到:224 天
连续签到:4 天
发表于 2019-11-26 11:18:30 | 显示全部楼层 |阅读模式
k8s 滚动升级

一 准备

1.编写一个简单的http服务,返回版本号

package main

import (
        "fmt"
        "log"
        "net/http"
)

var Version = "library-import"


func VersionHandle(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Version: %s", Version)
}

func main() {
        http.HandleFunc("/", VersionHandle)
        err := http.ListenAndServe(":8888", nil)
        if err != nil {
                log.Fatal("Http Server Err:", err)
        }
}
2.编译2个版本用于测试

go build -ldflags '-s -w -X main.Version=1' -o dist/app_v1 http_app/app.go
go build -ldflags '-s -w -X main.Version=2' -o dist/app_v2 http_app/app.go
3.编写Dockerfile,并且打包docker镜像推送到私有仓库

172.16.111.168 是私有仓库地址

Dockerfile_v1

FROM registry.aliyuncs.com/acs-sample/centos

ADD app_v1 /app
EXPOSE 8888
ENTRYPOINT ["/app"]
docker build -f dist/Dockerfile_v1 -t 172.16.111.168:5000/app:v1 ./dist/
docker push 172.16.111.168:5000/app:v1
Dockerfile_v2
FROM registry.aliyuncs.com/acs-sample/centos

ADD app_v2 /app
EXPOSE 8888
ENTRYPOINT ["/app"]
docker build -f dist/Dockerfile_v2 -t 172.16.111.168:5000/app:v2 ./dist/
docker push 172.16.111.168:5000/app:v2
二 创建 Deployment

1. 编写,创建app.yaml

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: app
spec:
  replicas: 10
  minReadySeconds: 10 # 容器启动创建多少s后服务可用
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1 # 升级过程中最多可以比原先设置多出的POD数量
      maxUnavailable: 1 # 升级过程中最多有多少个POD处于无法提供服务的状态


  selector:
    matchLabels:
        app: test_rollout
  template:
    metadata:
      labels:
        app: test_rollout
    spec:
      containers:
      - name: app
        image: 172.16.111.168:5000/app:v1
      dnsConfig:
        options:
          - name: ndots
            value: "1"

---

apiVersion: v1
kind: Service
metadata:
  name: app
spec:
  ports:
    - port: 8888
      targetPort: 8888
      protocol: TCP
  type: ClusterIP
  selector:
    app: test_rollout
kubectl create -f app.yaml --record=true
# -record=true 记录版本历史
2. 查看信息

# 版本信息
[root@master yaml]# kubectl rollout history deployment app
deployment.extensions/app
REVISION  CHANGE-CAUSE
1         kubectl create --filename=app.yaml --record=true


# k8s服务信息
[root@master yaml]# kubectl  describe service app
Name:              app
Namespace:         default
Labels:            <none>
Annotations:       kubernetes.io/change-cause: kubectl create --filename=app.yaml --record=true
Selector:          app=test_rollout
Type:              ClusterIP
IP:                10.109.162.251
Port:              <unset>  8888/TCP
TargetPort:        8888/TCP
Endpoints:         10.244.0.52:8888,10.244.0.53:8888,10.244.0.54:8888 + 7 more...
Session Affinity:  None
Events:            <none>

# deployments信息
[root@master yaml]# kubectl get deployments app
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
app    10/10   10           10          13m


# 访问服务
[root@master yaml]# curl 10.109.162.251:8888
Version: 1
3. 滚动升级

[root@master yaml]# kubectl set image deployment/app app=172.16.111.168:5000/app:v2 --record
deployment.extensions/app image updated

# 查看状态
[root@master yaml]# kubectl get deployments app
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
app    8/10    10           8           13m


# 查看升级记录
[root@master yaml]# kubectl rollout history deployment app
deployment.extensions/app
REVISION  CHANGE-CAUSE
1         kubectl create --filename=app.yaml --record=true
2         kubectl create --filename=app.yaml --record=tru

# 查看升级状态
[root@master yaml]# kubectl rollout status deployment app
deployment "app" successfully rolled out


[root@master yaml]# kubectl get deployments app
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
app    10/10   10           10          13m

# 访问服务
[root@master yaml]# curl 10.109.162.251:8888
Version: 2

# 已经升级完成
#暂停升级
kubectl rollout pause deployment app

#继续升级
kubectl rollout resume deployment app


#回滚到上一级
kubectl rollout undo deployment app

#回滚到指定版本
kubectl rollout undo deployment app --to-revision=1


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-988941-1-1.html 上篇帖子: 容器内抓包小技巧 下篇帖子: 容器概念:OCI、CRI、CNI介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表