kubernetes集群使用spinnaker完成自动化部署

Spinnaker 构建部署介绍

Spinnaker 的集群管理和部署功能两大核心功能,但是都是单独演示,没有将两者有机结合起来,今天,我们来通过一个示例来演示如何通过 Spinnaker 结合外部平台完成整个流程的自动化构建以及自动化部署到 Kubernetes 集群中。下边,我针对该示例做一些必要的说明。

  1. 开发人员将代码推送到 GitHub。
  2. GitHub 触发 Jenkins。
  3. Jenkins 构建一个 Docker 映像,然后为它添加标签并推送到 Amazon Elastic Container Registry (Amazon ECR)。
  4. Spinnaker 管道将在 Amazon ECR 收到此新 Docker 映像时触发。
  5. 然后 Spinnaker 将执行如下操作:
    1. 使用 Helm 生成 (Bake) Kubernetes 部署文件(开发和生产)。
    2. 将 Kubernetes 部署到开发环境。
    3. 人工判断:我们的管道配置需要人工手动确认,然后才能将应用程序部署到生产环境。它会等待此步骤完成,然后才会继续执行管道。
    4. 将代码部署到生产环境。

Spinnaker 上配置Jenkins 流水线

create applications

建议:命名规则为:环境名0研发部0项目分类

创建流水线(pipeline)

  1. 创建项目

  1. 创建4个Parameters

  1. 创建stage

  • 类型选择Jenkins
  1. 配置流水线

运行测试

可能会出现的问题

1
WARNING hudson.security.csrf.CrumbFilter#doFilter: No valid crumb was included in request for job/xxxxx by k4nz. Returning 403.

解决办法

1
2
3
4
5
vim /var/k8s-yaml/jenkins/deployment.yaml 
....
env:
- name: JAVA_OPTS
value: -Xmx512m -Xms512m -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

Spinnaker 上配置deploy

创建stage

image-20210905161138594

image-20210905161209395

注意:这里就是点点点实现k8s-dp配置页面

Configure Deployment Cluster

名称用法
Account那个用管理k8s
Namespace发布到那个namespace
Stack灰度发布时:c
Detail项目名称:dubbo-demo-service
Containers在harbor中获取容器
Init Containersk8s高级特性
Strategy发布策略

image-20210905162205498

image-20210905162257294

History Limit建议保留7个副本

image-20210905162558471

挂载目录,看着眼熟吗?filebaet与业务容器日志挂载。

在Pod Annotations中加注解,添加prometheus监控

Node Selector:人工调度到那个节点

Environment Variables:添加环境变量

日志挂载

image-20210909103006584

添加就绪性探针

image-20210909103740318

第二个容器配置

修改Deploy json配置

1
2
3
4
5
6
7
"imageDescription": {
"account": "harbor",
"imageId": "harbor.od.com/app/dubbo-demo-service:apollo_20210905_1603",
"registry": "harbor.od.com",
"repository": "app/dubbo-demo-service",
"tag": "apollo_20210905_1603"
},
1
2
3
4
5
6
7
"imageDescription": {
"account": "harbor",
"imageId": "harbor.od.com/${ parameters.image_name }:${ parameters.git_ver }_${ parameters.add_tag }",
"registry": "harbor.od.com",
"repository": "${ parameters.image_name }",
"tag": "${ parameters.git_ver }_${ parameters.add_tag }"
},

重新构建流水线

日志收集

监控(略)

Spinnaker 构建dubbo-demo-consumer

流水线名称要与gitee上名称一致!

创建4个Parameters

创建流水线(pipeline)

Spinnaker配置svc

Spinnaker配置ingress

Spinnaker 上配置deploy

修改Deploy json配置

1
2
3
4
5
6
7
"imageDescription": {
"account": "harbor",
"imageId": "harbor.od.com/app/dubbo-demo-web:tomcat_20210909_1140",
"registry": "harbor.od.com",
"repository": "app/dubbo-demo-web",
"tag": "tomcat_20210909_1140"
},
1
2
3
4
5
6
7
"imageDescription": {
"account": "harbor",
"imageId": "harbor.od.com/${ parameters.image_name }:${ parameters.git_ver }_${ parameters.add_tag }",
"registry": "harbor.od.com",
"repository": "${ parameters.image_name }",
"tag": "${ parameters.git_ver }_${ parameters.add_tag }"
},

构建流水线打开demo-test.od.com查看

日志收集