0%

使用vscode编辑器

pipeline的yaml配置文件中,配置参数需要遵循上下文。倘若只根据官方文档列出来的去编写,可能会因为配置参数的缩进错误,放置层级的错误从而不断的修改,在没有完全上手的阶段,效率会比较底下。

可以尝试使用vscode,vscode有专门针对concourse pipeline配置的扩展,使用后会自动层级对齐,补全,错误提示等功能,极大提升编写效率。

直接在”扩展”里面搜索concourse ci pipeline editor, 安装完毕后,对于如下规则的yml文件就会默认启用插件功能。

1
2
**/*pipeline*.yml | **/pipeline/*.yml : activates support for editing pipelines
**/tasks/*.yml | **/*task.yml : activates support for editing tasks.
Read more »

需求

  1. 编写一个自定义微信告警resource

知识点

  1. 一个resource的执行有三个阶段组成,checkinout
  2. 任意一个阶段,传入的字段都为固定,且都有其固定的标准输出格式。
  3. check对应check,in阶段对应yaml中的get,out阶段对应yaml中的put
  4. 如果要在concourse ui打印输出,则需要将标准输出重定向到标准错误输出。
  5. in阶段和out阶段只是逻辑上对你的resource代码进行区别,并不是强制某些代码必须写在in阶段。而check阶段的代码则是强制。
  6. 三个阶段执行顺序为check阶段,in阶段,out阶段。
  7. 编写的dockerfile需要将check in out作为可执行文件放入/opt/resource下面。
Read more »

需求

  1. 根据仓库的helm chart,自动构建Chart,并且推送到Chart仓库

难点

  1. 没有合适的resource,需要自己通过脚本实现。
  2. 需要自己构建helm的镜像,用于chart的推送。
Read more »

之前没有接触过使用concourse做ci/cd工具,这次进行了尝试,该文档主要是记录了对使用过程中的一些改进。

我这边会记录对每个需求的设计和改进。

需求

  1. 只需要提交代码,能让concourse自动创建pipelines。
Read more »

部署流程图

生产遇到的问题

k8s环境在一个阿里账号下,但阿里镜像仓库在另外的一个阿里账号下。

在k8s环境中部署服务的时候,发现镜像拉取失败,使用kubectl describe pod xxx在event字段发现如下报错:

1
2
3
4
5
6
7
8
9
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned default/nginx to k3s-node2
Warning Failed 59s kubelet, k3s-node2 Error: ErrImagePull
Warning Failed 59s kubelet, k3s-node2 Failed to pull image "registry.cn-shanghai.aliyuncs.com/huangyisan/nginx:latest": rpc error: code = Unknown desc = failed to pull and unpack image "registry.cn-shanghai.aliyuncs.com/huangyisan/nginx:latest": failed to resolve reference "registry.cn-shanghai.aliyuncs.com/huangyisan/nginx:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
Warning Failed 59s kubelet, k3s-node2 Error: ImagePullBackOff


Read more »

情景和思路

当需要接入多个kubernetes集群的情况,如果使用--kubeconfig进行指定config file后执行kubectl命令会比较麻烦。可以使用kubectl config use-context ${context_name}命令进行切换context,从而实现一个config file文件能连接多个cluster的功能,当然一个时间段内是只能连接一个的。

配置文件路径

配置文件一般名称为config,放置路径为$HOME/.kube/目录下。

Read more »

go语言中的defer

  1. 当执行defer时,会将defer后面的语句压入到单独的栈(defer栈)。
  2. 当函数执行完毕后(遇到return,panic或者函数顺序执行完),在从defer栈中,按照先入后出的方式,执行。
  3. 如果函数的定义为匿名返回值,则defer无法修改。
  4. 如果函数的定义为具名返回值,则defer会进行修改。
  5. 在函数中,需要创建资源,文件句柄,数据库连接等,在执行完毕后,关闭这些资源。go提供了defer(延时机制)。
Read more »

HELM基本介绍

helm是一个可以让k8s上的应用服务进行简便安装,方便管理的工具。可以理解对yum/apt等包管理工具,只不过他是k8s特有的。

目前helm有v2以及v3版本。v2版本需要客户端和服务端相互配合,服务端成为tiller,而v3的版本则不需要服务端的支持了。对于helm的命令,v2和v3也有许些区别。

为什么要有helm? 通常我们一个k8s应用服务有pods, depolyment, services,ingress等等若干组件来组成,且部分组件还有相互调用的关系,你可以需要编写很多个yaml文件来处理其中之间的关系。你自己对这些文件了如指掌,但如果进行交付给他人维护,或者要做ci/cd的话,可能就不是很方便了。使用helm,编写chart,或者使用互联网上已经存在的现存chart,通过命令,非常便捷的部署和管理应用服务。

本篇使用的是v3版本。

Read more »